2012-05-09 53 views
0

我使用的是Commons.IO的FileUtils,我試圖創建一個備份腳本,簡單的規則是從源複製到目錄目錄中不存在的所有文件(和子目錄)在目的地或源中是否有最後修改的日期比其他更新。Java FileUtils複製備份目錄

我不明白如果FileUtils.copyDirectory()是正確的選擇比我如何設置正確的FileFilter。

謝謝。

+4

'rsync'非常擅長處理你想用'Java'做的事情。這不是一個選項嗎? – Romain

+0

我不知道那個圖書館,你認爲它是穩定的嗎?我看到它不再是開發者。 – Tobia

+1

請參閱http://rsync.samba.org/,最新版本自2011年9月起,仍保留,廣泛使用並被視爲參考。 – Romain

回答

0

FilenameFilter只匹配名稱的文件或目錄。它無法幫助您決定是否在不同的樹中包含基於存在的項目。但是,copyDirectory()似乎正在爲您的需求做正確的事情,效率低下 - 如果您想從複製中排除未更改的文件,則需要自行添加該邏輯。 (該解決方案仍然可以在內部使用copyDirectory(),除非您想要在每個級別上進行日期比較。)

+0

我的意思是FileFilter不是FilenameFilter,也許我必須創建自己的FileFilter並檢查從src exsist中的文件是否在dest文件夾中,並檢查修改時間...我想我可以做到這一點,但我必須從src絕對路徑中找到dest文件... – Tobia

0

由於@romain在他對rsync問題的評論中指出這將非常有效(僅複製更改,包括文件內的更改)

話雖如此,您將不得不將文件過濾器中獲得的文件與其他目錄中的「相同」文件進行比較,只需更改文件路徑的頂部並檢查它們。

或者對於執行更好的操作來查看關於文件系統目錄遍歷的java 7 I/O改進。執行比Commons FileUtils更好。