2009-07-21 36 views
7

Tôi cần biết khi nào một tệp mới xuất hiện trong một thư mục. Rõ ràng, tôi có thể thăm dò ý kiến ​​hệ thống tập tin định kỳ, nhưng điều đó có tất cả các nhược điểm bình thường của các cơ chế bỏ phiếu.Làm cách nào để nhận các sự kiện hệ thống tệp của Windows trong Java?

Tôi biết rằng windows supports file system events và dự án này đã bị hạn chế đối với nền tảng Windows bởi các yêu cầu khác.

Có ai có kinh nghiệm nhận sự kiện hệ thống tệp Windows bên trong JVM không? Nếu vậy các phương pháp hay nhất, mẫu và/hoặc thư viện bạn đã sử dụng là gì?

Một google nhanh chóng bật lên this library. Có ai có kinh nghiệm với nó (hoặc bất kỳ khác) mà họ muốn sẵn sàng chia sẻ?

+0

câu hỏi này có ít nhất 2 bị trùng lặp trên ngăn xếp tràn – dfa

+0

khả năng ghép đôi của http://stackoverflow.com/questions/730186/suggestions-sample-code-for-filesystemwatcher-in-java/732418 – notnoop

+0

một lần trùng lặp khác: http: // : //stackoverflow.com/questions/1096404 – dfa

Trả lời

7

Tôi nghĩ đây là một trong những tính năng chính của Java 7 khi có nhiều tính năng hơn. Mã mẫu từ Sun's blog on Java 7:

nhập tĩnh java.nio.file.StandardWatchEventKind. *;

Path dir = ...; 
try { 
    WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); 
} catch (IOException x) { 
    System.err.println(x); 
} 
+0

Tốt, tôi không biết điều đó. – Draemon

+0

Nếu đây là mã sản xuất Java 7 không nên sử dụng. Nó không được phát hành. –

1

Cấp độ khá thấp và hệ điều hành cụ thể như vậy sẽ cần mã gốc (theo liên kết bạn đề cập đến). Thư viện đó trông tương đối nhỏ, vì vậy trong trường hợp xấu nhất bạn có thể sửa chữa bất kỳ vấn đề nào nếu C++ của bạn đủ tốt.

Nếu bạn có thể tránh được điều này, tôi khuyên bạn không nên sử dụng mã gốc - thư viện hay không. Yêu cầu gì về kịch bản của bạn là bạn không thể có cuộc thăm dò chủ đề nền?

0

Nếu không sử dụng Jdk7, bạn sẽ phải sử dụng JNI.

2

Đối với Java 6 hoặc cũ hơn, hãy sử dụng com.sun.jna.platform.win32.FileMonitor của Java 6 hoặc cũ hơn.

1

Bạn có thể sử dụng mã nguồn mở khuôn khổ JPollar để thăm dò ý kiến ​​các thư mục trong các khoảng thời gian. Nó cũng cho phép bỏ phiếu dựa trên thời gian.

+0

Sẽ rất tuyệt nếu bạn cung cấp liên kết để hoàn thành câu trả lời – voromax

Các vấn đề liên quan