一、使用FileStreams复制
最经典的实现方式
但是效率非常低下
privatestaticvoidcopyFileUsingFileStreams(Filesource, Filedest) throwsIOException { InputStreaminput=null; OutputStreamoutput=null; try { input=newFileInputStream(source); output=newFileOutputStream(dest); byte[] buf=newbyte[1024]; intbytesRead; while ((bytesRead=input.read(buf)) >0) { output.write(buf, 0, bytesRead); } } finally { input.close(); output.close(); } }
二、使用FileChannel复制
Java NIO包括transferFrom方法
速度应该比文件流复制的速度更快
privatestaticvoidcopyFileUsingFileChannels(Filesource, Filedest) throwsIOException { FileChannelinputChannel=null; FileChanneloutputChannel=null; try { inputChannel=newFileInputStream(source).getChannel(); outputChannel=newFileOutputStream(dest).getChannel(); outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); } finally { inputChannel.close(); outputChannel.close(); } }
三、使用Commons IO复制
Apache Commons IO提供拷贝文件方法在其FileUtils类,可用于复制一个文件到另一个地方。
其复制文件的原理就是上述第二种方法:使用FileChannel复制
privatestaticvoidcopyFileUsingApacheCommonsIO(Filesource, Filedest) throwsIOException { FileUtils.copyFile(source, dest); }
四、使用Java7的Files类复制
Java 7中可以使用复制方法的Files类文件,从一个文件复制到另一个文件。
privatestaticvoidcopyFileUsingJava7Files(Filesource, Filedest) throwsIOException { Files.copy(source.toPath(), dest.toPath()); }