1

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

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

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

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

所以我的问题是:当我使用那个FileUtils类时,我怎样才能以跨平台的方式sourceFolder检查文件系统?destinationFolder

4

1 回答 1

1

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

moveFile 处理源和目标位于不同目录的情况。它的作用是尝试使用File.renameTo,如果失败,它会尝试复制文件。(见源代码。)总之,不需要自己检查......

但是针对您的实际问题,FileApache都没有FileUtils 提供测试两个目录是否在同一个文件系统上的方法。但是(我认为)您可以通过以下方式使用 Java 7 功能来做到这一点:

Path path1 = new File(str1).toPath();
Path path2 = new File(str2).toPath();
if (path1.getFileSystem().equals(path2.getFileSystem()) {
    ...
于 2013-10-17T22:55:04.673 回答