如何在Java文件系统之间移动(大)文件?

时间:2013-10-17 22:38:53

标签: java file-io apache-commons

在我的Java 7应用程序中,我需要将sourceFolder中的所有文件和目录移动到另一个destinationFolder。我不知道这两个文件夹是在同一个文件系统还是分区,因为两者都可以在运行时由用户指定。

由于要移动的文件和目录可能非常大(一些GB),我正在寻找一种有效的移动方式。因此,只有在sourceFolderdestinationFolder不在同一文件系统上时才应复制它们。理想情况下,如果可能的话,同一文件系统上的移动操作应该是重命名操作。

该应用程序用于Windows和Linux系统。

我知道一些related Java 7 functionalities,但是,如果它不是空的话,他们不允许将文件夹的所有内容移动到其他地方,这在我的情况下是必需的。我还发现了Apache Common's FileUtils类,看起来很有希望。但是,如果sourceFolderdestinationFolder不在同一文件系统上,则其文档说明应该执行“复制和删除”操作。

所以我的问题是:当我使用FileUtils课程时,如何以跨平台的方式检查sourceFolderdestinationFolder的文件系统?

1 个答案:

答案 0 :(得分:1)

我假设您指的是FileUtils.moveFile()

moveFile 注意源和目标位于不同目录的情况。它的作用是尝试使用File.renameTo,如果失败,它会尝试复制文件。 (见source code。)简而言之,不需要亲自检查......

但是在回答您的实际问题时,File或Apache FileUtils都没有  如果两个目录位于同一文件系统上,则提供 test 的方法。但是(我认为)你可以通过类似这样的方式使用Java 7功能来实现它:

Path path1 = new File(str1).toPath();
Path path2 = new File(str2).toPath();
if (path1.getFileSystem().equals(path2.getFileSystem()) {
    ...