Rig*_*des 72
以下是如何通过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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
eri*_*son 40
还没有,但New NIO(JSR 203)将支持这些常见操作.
与此同时,还有一些事情需要牢记.
File.renameTo通常仅适用于同一文件系统卷.我认为这相当于"mv"命令.如果可以的话,请使用它,但是对于一般复制和移动支持,您需要有一个后备.
当重命名不起作用时,您将需要实际复制文件(如果它是"移动"操作,则使用File.delete删除原始文件).要以最高效率执行此操作,请使用FileChannel.transferTo或FileChannel.transferFrom方法.实现是特定于平台的,但通常,当从一个文件复制到另一个文件时,实现避免在内核和用户空间之间来回传输数据,从而大大提高了效率.
Pyr*_*cal 17
退房:http: //commons.apache.org/io/
它有副本,如上所述JDK已经移动.
不要实现自己的复制方法.有那么多漂浮在那里......
ntg*_*ntg 10
以前的答案似乎已经过时了.
Java的File.renameTo()可能是API 7最简单的解决方案,似乎工作正常.小心它不会出现异常,但会返回真/假!!!
请注意,在以前的版本中似乎存在问题(与NIO相同).
如果您需要使用以前的版本,请点击此处.
File f1= new File("C:\\Users\\.....\\foo");
File f2= new File("C:\\Users\\......\\foo.old");
System.err.println("Result of move:"+f1.renameTo(f2));
Run Code Online (Sandbox Code Playgroud)
或者:
System.err.println("Move:" +f1.toURI() +"--->>>>"+f2.toURI());
Path b1=Files.move(f1.toPath(), f2.toPath(), StandardCopyOption.ATOMIC_MOVE ,StandardCopyOption.REPLACE_EXISTING ););
System.err.println("Move: RETURNS:"+b1);
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试使用org.apache.commons.io.FileUtils(常规文件操作实用程序).设施以下列方式提供:
(1)FileUtils.moveDirectory(File srcDir,File destDir) =>移动目录.
(2)FileUtils.moveDirectoryToDirectory(File src,File destDir,boolean createDestDir) =>将目录移动到另一个目录.
(3)FileUtils.moveFile(File srcFile,File destFile) =>移动文件.
(4)FileUtils.moveFileToDirectory(File srcFile,File destDir,boolean createDestDir) =>将文件移动到目录.
(5)FileUtils.moveToDirectory(File src,File destDir,boolean createDestDir) =>将文件或目录移动到目标目录.
它简单,容易,快速.