2012-05-09 57 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更好。