使用Java语言如何实现快速文件复制?

来源:互联网 发布:python执行cmd命令行 编辑:程序博客网 时间:2024/06/05 18:30

        今天review代码又看到某个“大神”使用古老的方法来实现文件的复制发火,今天归结一下使用Java语言如何实现快速文件复制:

        代码1——使用文件通道的方式:

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.nio.channels.FileChannel;public class Test {public static void main(String[] args){long start = System.currentTimeMillis();FileInputStream fileInputStream = null;        FileOutputStream fileOutputStream = null;        FileChannel inFileChannel = null;        FileChannel outFileChannel = null;        try {        fileInputStream = new FileInputStream(new File("C:\\from\\不是闹着玩的.flv"));        fileOutputStream = new FileOutputStream(new File("C:\\to\\不是闹着玩的.flv"));            inFileChannel = fileInputStream.getChannel();            outFileChannel = fileOutputStream.getChannel();            inFileChannel.transferTo(0, inFileChannel.size(), outFileChannel);//连接两个通道,从in通道读取数据写入out通道。        } catch (IOException e) {            e.printStackTrace();        } finally {            try {            if(fileInputStream != null){            fileInputStream.close();            }            if(inFileChannel != null){                inFileChannel.close();            }                if(fileOutputStream != null){                fileOutputStream.close();                }                if(outFileChannel != null){                outFileChannel.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }long end = System.currentTimeMillis();System.out.println("视频文件从“from”文件夹复制到“to”文件需要" + (end - start) + "毫秒。");}}

        代码运行结果为:

        代码2——使用缓冲输入输出流

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class Test {public static void main(String[] args){long start = System.currentTimeMillis();InputStream fileInputStream = null;        OutputStream fileOutputStream = null;        try {        fileInputStream = new BufferedInputStream( new FileInputStream(new File("C:\\from\\不是闹着玩的.flv")));        fileOutputStream = new BufferedOutputStream(new FileOutputStream(new File("C:\\to\\不是闹着玩的.flv")));        byte[] bufferArray = new byte[1024*1024];               int length;               while ((length = fileInputStream.read(bufferArray)) != -1) {                   fileOutputStream.write(bufferArray, 0, length);               }          } catch (IOException e) {            e.printStackTrace();        } finally {            try {            if(fileInputStream != null){            fileInputStream.close();            }                if(fileOutputStream != null){                fileOutputStream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }long end = System.currentTimeMillis();System.out.println("视频文件从“from”文件夹复制到“to”文件需要" + (end - start) + "毫秒。");}}
        代码运行结果为:
  

        代码3——使用文件输入输出流的方式:

import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class Test {public static void main(String[] args){long start = System.currentTimeMillis();FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;try{fileInputStream = new FileInputStream(new File("C:\\from\\不是闹着玩的.flv")); //读入原文件 fileOutputStream = new FileOutputStream("C:\\to\\不是闹着玩的.flv");       byte[] bufferArray = new byte[1024*1024];        int length;        while ((length = fileInputStream.read(bufferArray)) != -1) {        fileOutputStream.write(bufferArray, 0, length);        }} catch (IOException e) {            e.printStackTrace();          } finally {        try {        if(fileInputStream != null){        fileInputStream.close();        }        if(fileOutputStream != null){        fileOutputStream.close();        }} catch (IOException e) {e.printStackTrace();}        }long end = System.currentTimeMillis();System.out.println("视频文件从“from”文件夹复制到“to”文件需要" + (end - start) + "毫秒。");}}
        代码运行结果为:

        代码1、代码2和代码3复制的是相同的文件,通过比较不难得出结论:在文件复制时尽量使用文件输入输出流可能是比较好的办法。

0 0
原创粉丝点击