【问题标题】:How to move (large) files between file systems in Java?如何在 Java 文件系统之间移动(大)文件?
【发布时间】:2013-10-17 22:38:52
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java file-io apache-commons


    【解决方案1】:

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

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

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

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

    【讨论】:

    • @Matthias 注意FileSystem 不代表不同的磁盘。
    • 这应该适用于 Windows,但我不太确定 Unix 文件系统。
    猜你喜欢
    • 2023-04-06
    • 2012-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多