Tôi đang gặp sự cố lặp lại trong ứng dụng theo dõi nội dung tệp trong thư mục, dựa trên API Java 7 WatchService. Khi hệ thống tệp cơ bản kích hoạt sự kiện sửa đổi trên một tệp, tôi muốn tính toán SHA-256 ngay lập tức. Tuy nhiên, thường xảy ra rằng một quá trình khác đã mở tệp (tức là Word), do đó giữ một khóa độc quyền và ngăn ứng dụng của tôi khỏi bất kỳ hoạt động đọc/ghi nào. Nếu bất kỳ Suối/Kênh được tạo ra chống lại các tập tin mở ra, một FileNotFoundException hay FileSystemException cho nio API được ném với một thông điệp như:Java I/O: Đảm bảo tệp không bị khóa bởi một quy trình khác trước khi bất kỳ hoạt động r/w nào
Quá trình này không thể truy cập các tập tin vì nó đang được sử dụng bởi quá trình khác
Tôi đã không thể đi kèm với một giải pháp có thể phát hiện các trường hợp như vậy mà không che giấu một "thực" FileNotFoundException khi tệp không thực sự tồn tại trên fs.
Tôi đã đưa ra ý tưởng để kiểm tra sự tồn tại thông qua File.exists và sau đó nếu một FileNotFoundException được ném khi tôi mở một luồng, tôi sẽ có thể suy ra rằng tệp bị khóa. Tôi mở cho bất kỳ đầu vào về điều này!
Cảm ơn!
có bao giờ tìm được giải pháp cho điều này không? –
Tôi đã kết thúc bằng cách sử dụng heuristic được đề cập, nếu File.exists trả về true trong khối catch FileNotFoundException tôi giải thích nó như là một tập tin bị khóa. – sylvain