在 Java 中移动/复制文件操作
是否有标准的Java库来处理常见的文件操作,例如移动/复制文件/文件夹?
以下是使用操作执行此操作的方法: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();
}
}
}
还没有,但New NIO(JSR 203)将支持这些常见操作。
与此同时,有几件事要记住。
File.renameTo 通常仅适用于同一文件系统卷。我认为这相当于“mv”命令。如果可以的话,请使用它,但对于常规的复制和移动支持,您需要有一个回退。
当重命名不起作用时,您将需要实际复制文件(如果是“移动”操作,请使用File.delete删除原始文件)。若要以最高的效率执行此操作,请使用 FileChannel.transferTo 或 FileChannel.transferFrom 方法。该实现是特定于平台的,但一般来说,当从一个文件复制到另一个文件时,实现避免在内核和用户空间之间来回传输数据,从而大大提高了效率。