在Java中复制文件的唯一方法是打开流、声明缓冲区、读入一个文件、在其中循环并将其写入另一个steam,这一直困扰着我。web上充斥着类似的、但仍然略有不同的此类解决方案的实现
有没有更好的方法保持在Java语言的范围内(意思是不涉及执行特定于操作系统的命令)?也许在某个可靠的开源实用程序包中,这至少会掩盖这个底层实现,并提供一个单线解决方案
我会避免使用像ApacheCommons这样的大型api。这是一个过于简单的操作,它内置于新NIO包中的JDK中。在前面的回答中,它已经被链接到了,但是NIOAPI中的关键方法是新函数“transferTo”和“transferFrom”
其中一篇链接文章介绍了如何使用transferFrom将此函数集成到代码中的一个好方法:
公共静态void copyFile(文件sourceFile,文件destFile)引发IOException{
如果(!destFile.exists()){
destFile.createNewFile();
}
filechannelsource=null;
filechanneldestination=null;
试一试{
source=新文件输入流(sourceFile).getChannel();
destination=新文件输出流(destFile).getChannel();
destination.transferFrom(source,0,source.size());
}
最后{
如果(源!=null){
source.close();
}
if(目的地!=null){
destination.close();
}
}
}
学习NIO可能有点棘手,所以您可能希望在开始学习NIO之前,相信这个机制。从个人经验来看,如果您没有这种经验,并且是通过java.IO流介绍给IO的,那么要了解这一点可能非常困难