在 Java 中移动/复制文件操作

2022-08-31 13:58:41

是否有标准的Java库来处理常见的文件操作,例如移动/复制文件/文件夹?


答案 1

以下是使用操作执行此操作的方法:java.nio

public static void copyFile(File sourceFile, File destFile) throws IOException {
    if(!destFile.exists()) {
        destFile.createNewFile();
    }

    FileChannel source = null;
    FileChannel destination = null;
    try {
        source = new FileInputStream(sourceFile).getChannel();
        destination = new FileOutputStream(destFile).getChannel();

        // previous code: destination.transferFrom(source, 0, source.size());
        // to avoid infinite loops, should be:
        long count = 0;
        long size = source.size();              
        while((count += destination.transferFrom(source, count, size-count))<size);
    }
    finally {
        if(source != null) {
            source.close();
        }
        if(destination != null) {
            destination.close();
        }
    }
}

答案 2

还没有,但New NIO(JSR 203)将支持这些常见操作。

与此同时,有几件事要记住。

File.renameTo 通常仅适用于同一文件系统卷。我认为这相当于“mv”命令。如果可以的话,请使用它,但对于常规的复制和移动支持,您需要有一个回退。

当重命名不起作用时,您将需要实际复制文件(如果是“移动”操作,请使用File.delete删除原始文件)。若要以最高的效率执行此操作,请使用 FileChannel.transferToFileChannel.transferFrom 方法。该实现是特定于平台的,但一般来说,当从一个文件复制到另一个文件时,实现避免在内核和用户空间之间来回传输数据,从而大大提高了效率。