2014-11-06 49 views
2

我面臨以下情況...在我的文件系統()我的某個地方接受來自第三方應用程序的文件。例如,在目錄C:\ temp中觀察一個文件夾結構的變化和相應的處理文件

這些文件包含特定的元數據,我將必須做的以下操作:

一個)根據元數據rellocate(所以第一i-將解析它們)在2級結構如: C:\ TEMP \ idXXX \ idYYYY \ fileZZZ 每個idYYYY文件夾可以包含多個文件 每個idXXX文件夾可以包含多個文件夾(例如idYYYY,idYYYYE等) 在根文件夾可能有多個idXXXX類型文件夾

b)重新分配這些文件後,我應該監視每個第一級目錄(idXX XX)更改一段時間間隔

c)如果沒有發現變化(沒有額外的文件夾/文件創建),那麼我應該壓縮它並將它發送到某處!

d)實現這樣的服務在後臺運行continiously ...只是輪詢這個根目錄

我試圖找到的Java庫,可以管理這整個業務場景!

有什麼想法?

回答

3

使用WatchService監視你的目錄:

WatchService watchService = FileSystems.getDefault().newWatchService(); 
WatchKey watchKey = path.register(watchService, 
            ENTRY_CREATE, 
            ENTRY_DELETE, 
            ENTRY_MODIFY); 

使用通常File方法剩下的就是實現你的邏輯。

0

如果您只需要監視更改,可以將文件名保存在一個字符串數組中,並在另一箇中讀取它們,因此將它們與for循環進行比較會告訴您該文件夾中的任何新文件。

for (i= 0; i< oldfiles.length(); i++){ 
if (oldfiles[i] != newfiles[i]){ //in case there's a difference 
//your code here 
} 
} 

注意,如果沒有文件名從newfiles[]擦除和一些添加,newfiles[]會大於oldfiles[]和精確的名字將是新的,所以你應該繼續閱讀newfiles []數組:

for (i=oldfiles.length() + 1; i<newfiles.length(); i++){ 
// your code here 
} 

最後你應該newfiles[]陣列複製到oldfiles[]數組的下一個比較

希望它能幫助。我不確定java-ee語法是否與標準java相同。

相關問題