我有一個輪詢器每35秒在一個特定的目錄上運行。這些文件通過SFTP服務器放置在此目錄中。問題是輪詢與文件被複制的時間衝突。它挑選尚未完全複製的不完整文件。Java:檢查一個文件是否已經使用SFTP完全複製
我們知道文件的狀態是處於複製模式還是複製模式?
我有一個輪詢器每35秒在一個特定的目錄上運行。這些文件通過SFTP服務器放置在此目錄中。問題是輪詢與文件被複制的時間衝突。它挑選尚未完全複製的不完整文件。Java:檢查一個文件是否已經使用SFTP完全複製
我們知道文件的狀態是處於複製模式還是複製模式?
具有輪詢筆記文件大小。如果大小從一輪到下一輪都沒有變化,則文件完成下載。
您可以影響SFTP服務器嗎?可以在下載完成後創建標記文件嗎(例如'.thisIsAFile.doc.done
')?
在某些環境中,由於網絡滯後,SFTP傳輸可能會暫時減慢,因此即使等待間隔結束後,文件大小仍然保持不變。這發生在我的環境中。 –
有文件觀察家幾種常見的策略,以「知道」的文件被完全轉移
與時間間隔投票,並把該文件,如果文件大小不是一個區間內改變到完全轉移。例如每隔1分鐘觀察文件是否存在。一旦你看到文件存在,每5秒監視一次它的大小。如果文件大小保持30秒不變,則將其視爲完全傳輸。
傳輸過程是否在文件傳輸後創建標記文件。例如完成傳輸文件FOO.txt
後,創建一個空的FOO.txt.tag
。您的文件守望者是要檢查的FOO.txt.tag
存在,一旦它的存在,你知道FOO.txt
已經完全轉移
在某些特殊情況下,該文件是有特殊的格式(例如特殊的頁腳行),那麼你的文件守望者可以輪詢該文件並看到最後行,看他們是否具有期望的圖案
每種方法都有其優點和缺點匹配:
選擇適合您的需要
這通常所做的一個爲每個實際文件使用'.done'擴展名左右的臨時標誌文件。如果此標誌文件丟失,則文件未完全複製。 –