Java文件复制代码如下:
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileCope { /*** * 方式一:使用文件流复制 */ public static void copyFile(String source, String target) { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(source); out = new FileOutputStream(target); byte[] buffer = new byte[2048]; int readBuffer; while ((readBuffer = in.read(buffer)) != -1) { // 从输入流中读取一定数量的字节,并将其存储在缓冲区数组buffer中。 out.write(buffer, 0, readBuffer); // buffer数组中从偏移量为0开始的readBuffer个字节写入到out输出流。 } } catch (IOException e) { e.printStackTrace(); } finally { try { out.close(); in.close(); } catch (IOException e) { e.printStackTrace(); } } } /*** * 方式二:使用Try-with-resources (TWR)进行复制 */ public static void copyFileTWR(String source, String target)throws IOException{ try (InputStream in = new FileInputStream(source)) { try (OutputStream out = new FileOutputStream(target)) { byte[] buffer = new byte[2048]; int bytesToRead; while ((bytesToRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesToRead); } } } } /*** * 方式三:使用FileChannel复制 */ public static void copyFileNIO(String source, String target) throws IOException { try (FileInputStream in = new FileInputStream(source)) { try (FileOutputStream out = new FileOutputStream(target)) { FileChannel inChannel = in.getChannel(); FileChannel outChannel = out.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(2048); //分配一个大小为2048的字节缓冲区。 while (inChannel.read(buffer) != -1) { buffer.flip(); //反转缓冲区。通常情况下,在准备从缓冲区中读取数据时调用flip方法。 outChannel.write(buffer); buffer.clear(); } } } } public static void main(String args[]){ copyFile("E://1.txt","E://2.text"); try { copyFileTWR("E://2.txt","E://3.txt"); copyFileNIO("E://3.txt","E://4.text"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
