Tôi có mã làm việc để nghe thư mục bằng cách sử dụng WatchService và trả lời các sự kiện tôi chỉ định. Điều này hoạt động tốt và đã được thử nghiệm trên cả linux và mac (mặc dù sau này rõ ràng là bỏ phiếu được sử dụng).Có cách nào để bỏ phiếu bằng cách sử dụng WatchService không?
Tuy nhiên, khi tôi triển khai điều này trong sản xuất, hóa ra thư mục đang được theo dõi là gắn kết NFS. Vì WatchService sử dụng inotify khi chạy trên linux nên không bao giờ có bất kỳ sự kiện nào được kích hoạt bởi vì NFS mounts không kích hoạt sự kiện inotify (hoặc một cái gì đó như thế này, có thêm thông tin ở đây, giải thích vấn đề của tôi: Java WatchService not generating events while watching mapped drives).
Vì mã của tôi đã được viết nên tôi muốn ép WatchService sử dụng việc thực hiện bỏ phiếu thay vì thực hiện việc inotify. Có cách nào để làm việc này không?
Tôi đã cố gắng này bằng cách tìm các mã nguồn sun.nio.fs.PollingWatchService và tạo ra một đối tượng trực tiếp (thay vì sử dụng FileSystems.getDefault() newWatchService().) Nhưng khi đăng ký dịch vụ với con đường tôi đã ngoại lệ này : java.nio.file.ProviderMismatchException.
Vì vậy, có ý tưởng nào không? Vì tôi đã triển khai mã bằng cách sử dụng API WatchService và WatchKey nên sẽ dễ dàng hơn nhiều khi chỉ thực hiện việc bỏ phiếu hơn là viết lại mọi thứ bằng cách sử dụng trình đẩy tùy chỉnh hoặc bên thứ ba. Cảm ơn!
Đây là loại chậm và không hiệu quả nhưng những gì về file 'f = new File (YOUR_DIRECTORY, "_garbage.tmp"); new FileOutputStream (f) .đóng(); f.delete(); 'và chỉ lắng nghe việc tạo các tệp có tên' "_garbage.tmp" '? –
@k_g: Cảm ơn bạn đã trả lời nhưng tôi không hiểu làm thế nào để giúp. Bất kỳ cơ hội bạn có thể xây dựng? – rjcarr
Nếu bạn tạo tệp rồi xóa tệp, tệp sẽ kích hoạt sự kiện WatchService, phải không? –