2010-09-28 26 views
6


có ai biết cách theo dõi thư mục bằng java không? hoặc bất cứ ai có thể cho tôi một điểm mà làm thế nào tôi có thể bắt đầu này. đây là suy nghĩ của tôi về nó.
là nó có thể theo dõi thư mục bằng cách sử dụng mã java?

bắt đầu một chuỗi để thay đổi các thư mục trong thư mục này hoặc điều gì đó khác xảy ra, như cập nhật lần cuối.
nhưng trong trường hợp này, bạn phải điều khiển vòng lặp luồng. nếu vòng lặp thread này không được kiểm soát tốt, thì nó sẽ là một sự lãng phí của cpu và có thể gây ra một vấn đề nghiêm trọng.

hoặc, có khung hoặc một số mã demo để làm điều này không? hy vọng chúng ta có thể tìm ra cách tốt hơn để làm điều này. cảm ơn bạn rất nhiều.

Trả lời

1

Suy nghĩ của bạn không phải là xấu.

Để giám sát thư mục trong java, cách thông thường là kiểm soát thư mục đó trong một chuỗi riêng biệt bằng cách sử dụng vòng lặp. Để tiết kiệm CPU, bạn có thể sử dụng tiến độ (kiểm tra cứ sau mỗi giây).

Sau đó, để thông báo thay đổi từ chuỗi này, bạn có thể sử dụng "Observer" design pattern.

+0

vâng, tôi biết giao diện này nên được thực hiện tốt. kiểm tra thư mục mỗi n giây sẽ làm điều đó tốt, nhưng làm thế nào tôi nên xác định một giây như vậy, bởi vì mã này sẽ được chạy cho CPU khác nhau và hệ điều hành khác nhau. đó không phải là dễ dàng nếu tôi muốn tiết kiệm CPU và các công cụ khác. nhưng, cảm ơn trả lời ur. –

0

Không, không. Có một số thư viện làm bỏ phiếu cho bạn như:

http://mindprod.com/jgloss/filemonitor.html đó là miễn phí và http://www.teamdev.com/jxfilewatcher đó không phải là miễn phí

"Tốt nhất, bạn muốn tránh bỏ phiếu và có thông báo ngay lập tức thay đổi Để thực hiện điều này. sẽ yêu cầu mã JNI hệ điều hành cụ thể để móc vào hệ thống tệp gốc. Điều này cũng sẽ yêu cầu đặc quyền cao. "

+0

qua JNI có nghĩa là viết mã nền tảng chéo cho java, nó cảm thấy không phù hợp với tôi. –

+0

jxfilewatcher không miễn phí. tôi nghĩ có lẽ chúng ta có thể tìm thấy một phần mềm nguồn mở hoặc thư viện để làm điều này. nếu không, tôi sẽ viết nó. –

+0

Liên kết đầu tiên tôi gửi là một liên kết miễn phí Tôi nghĩ rằng –

13

Gói java.nio.file của JDK7 có WatchService để hỗ trợ thông báo thay đổi tệp. Bạn có thể sử dụng nó để theo dõi một thư mục để thay đổi. Điều này sử dụng các cơ sở bản địa khi có sẵn, nếu không nó sử dụng một cơ chế nguyên thủy như bỏ phiếu. Here là một bài đăng trên đó.

Hiện tại, bạn có thể thử jpathwatch, đây là triển khai giao diện WatchService và sử dụng các chức năng hệ điều hành gốc, thay vì bỏ phiếu.

+0

tôi nghĩ rằng tôi phải chờ đợi một thời gian dài cho điều này, cuz jre hiện tại của tôi là jre6. –

+0

Tôi đã kiểm tra trên WatchService này, nó tuyệt vời nhưng chỉ đáng tiếc rằng nó sẽ chỉ có sẵn sau khi jdk7. –

1

Cách Java thuần túy sẽ được tách ra khỏi một chuỗi thăm dò thư mục và theo dõi các thay đổi. Một cách hiệu quả hơn là viết một thư viện hệ điều hành cụ thể (Bạn có thể phải làm điều đó trong C hoặc C++) có thể sử dụng các công cụ cụ thể của hệ điều hành để có được một thông báo (thông qua một cuộc gọi lại vào mã Java của bạn), và gọi nó qua JNI

+0

ý tưởng hay.nhưng nếu tôi sử dụng thư viện hệ điều hành cụ thể có nghĩa là ứng dụng của tôi sẽ không thể chạy trong hệ điều hành khác nhau. –

+0

Đúng. Bạn có thể mã nó theo cách mà nếu bạn đang chạy trên một hệ điều hành mà bạn có một thư viện mã sử dụng nó, nếu không nó mặc định cho một giải pháp hoàn toàn Java. Trong thực tế, như đã đề cập trong các câu trả lời khác, đây là những gì xảy ra trong Java 7 – PaulJWilliams

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