簡體   English   中英

用於文件的Java監視文件夾

[英]Java monitor folder for files

我需要監視某個文件夾中的新文件,我需要處理它。 我有以下要求:

  1. 文件的文件名是序列號。 我需要按順序處理每個文件。 (最低編號首先,不能保證每個序列號都存在。例如:1,2,5,8,9
  2. 如果啟動期間文件夾中已存在文件,我需要直接處理它們
  3. 我需要保證我只處理每個文件一次
  4. 我需要避免讀取不完整的文件(仍然被復制)
  5. 該服務應該是可靠的......

實現這一目標的最常見方法是什么?

我正在使用Java SE7和Spring 4。

我已經看過Java 7的WatchService,但它似乎在啟動期間處理現有文件時出現問題,並避免處理不完整的文件。

將評論匯總到答案中。

以正確順序解析文件的最簡單方法是將整個目錄文件列表加載到數組/列表中,然后使用適當的比較器對列表進行排序。 例如,使用File.list()File.listFiles()加載文件。

這不是最有效的方法,但是對於少於10,000個文件應該是足夠的,除非您需要更快的啟動時間性能(我可以想象在處理開始之前存在一個小的延遲,因為列出了所有文件)。

為了避免讀取不完整的文件,您應該獲取一個獨有的FileLock (通過FileChannel ,您可以從FileOutputStreamFileInputStream ,但是您可能無法從FileInputStream獲取獨占鎖定)。 假設正在使用的操作系統支持文件鎖定(現代操作系統這樣做),並且編寫文件的應用程序表現良好並且保持鎖定(希望是這樣),那么只要您能夠獲取鎖定,就知道文件已完成。

如果由於某種原因你不能依賴文件鎖定那么你需要讓編寫程序首先寫入一個臨時文件(可能有不同的擴展名),然后原子地移動/重命名文件(如果在同一個文件中,大多數操作系統都是原子的系統/分區),或監視文件一段時間,以查看是否正在寫入更多字節(不是最強大的方法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM