2016-12-14 85 views
4

我有一個Java應用程序監視目錄中的新文件並處理它在目錄中看到的任何新文件。 應用程序需要在Linux和Windows環境下運行。問題出現在linux上,當用戶手動拷貝目錄中的文件時,應用程序會在文件被完全複製到目錄之前選擇文件。 我有試圖用各種方法鎖定文件,但即使文件仍然被linux系統複製,應用程序也能夠獲取文件的鎖定。我也考慮使用lsof命令檢查文件,但它是linux特有的,所以我試圖避免這種情況。Linux + Java + Windows:檢查文件是否完全複製


可有人請提出一個方法,以防止應用程序正被攝取的不完整的文件? 在此先感謝。

+0

解決此問題的一種方法是始終將兩個文件複製到目標文件夾中。首先將實際的數據文件複製到目標文件夾中,讓我們調用該文件「fileName.dat」。一旦這個文件副本成功完成,你就在目標文件夾中創建一個名爲「fileName.done」的虛擬文件。您的應用程序會檢測以「.done」結尾的文件,並知道準備讀取的「fileName.dat」。 – Hector

+0

如果我們可以控制誰在複製目錄中的文件,這很有意義,很遺憾,我們不知道誰將複製文件以及如何引導它們。 – Prashant

+0

直到其尺寸穩定五分鐘,或任何你認爲合適的時候才使用它。 – EJP

回答

0

你可以在某些時間間隔檢查文件的大小如2二,如果不同,則文件被複制,如果沒有,那麼你可以去:)

0

,你可以實現一個方法是這樣的,當你的程序檢測一個新的文件存在於目錄中,它可以是文件添加到列表,並定期檢查每一個元素的文件大小與下面的方法列表:

文件#長度

如果在一定時間後文件大小沒有改變,理論上文件應該被完全複製並刷新到目錄。

+0

感謝您的迴應,我也考慮過這一點,但它似乎不是一個非常乾淨的解決方案。你有其他建議嗎? – Prashant

+0

另一種可能的解決方案是讓程序遞歸搜索原始文件並檢查其文件大小與複製的文件。您只需搜索一次,然後就可以在程序中的某個位置緩存它的絕對路徑。 –

0

也許一個解決方案是從this後的答案。您可以嘗試使用jpoller

相關問題