首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java 兑现文件复制的两种方式

2012-10-24 
java 实现文件复制的两种方式文件复制首先我们要考虑的是用字符流还是文件流操作呢?若我们考虑的仅仅是文

java 实现文件复制的两种方式
  文件复制首先我们要考虑的是用字符流还是文件流操作呢?
    若我们考虑的仅仅是文本之类的复制,字符流要好些。但是不可能总是文本文件吧,有可能是声音,图像,视频等等,所以使用字节流操作比较好。
    复制的两种方式
      1.将源文件中的内容全部读取到内存中,并一次性写入到目标文件
      2.不将源文件中的内容全部读取到内存中来,而是采取边读边写的方式
下面就是采用这两种方法对比

 package zzs.file.demo;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;public class FileCopy {private File inputFile;private File outputFile;private InputStream inputStream;private OutputStream outputStream;public FileCopy(String inputPath,String outputPath) throws FileNotFoundException{inputFile=new File(inputPath);outputFile=new File(outputPath);inputStream=new FileInputStream(inputFile);outputStream=new FileOutputStream(outputFile);}//一次性把数据全部读取到内存中来,再一次性写入public void copy1() throws IOException{byte b[]=new byte[(int)inputFile.length()];inputStream.read(b);       //一次性读入outputStream.write(b);   //一次性写入//inputStream.close();//outputStream.close();}//边读边写public void copy2() throws IOException{int temp=0;while((temp=inputStream.read())!=-1){outputStream.write(temp);}inputStream.close();outputStream.close();}public File getInputFile() {return inputFile;}public void setInputFile(File inputFile) {this.inputFile = inputFile;}public File getOutputFile() {return outputFile;}public void setOutputFile(File outputFile) {this.outputFile = outputFile;}public static void main(String[] args) throws IOException{String inputPath="e:"+File.separator+"Xfire.rar";String outputPath="f:"+File.separator+inputPath.substring(inputPath.indexOf(File.separator));FileCopy fileCopy=new FileCopy(inputPath, outputPath);long start1=System.currentTimeMillis();fileCopy.copy1();long end1=System.currentTimeMillis();System.out.println("一次性全部读入内存复制文件大小为"+fileCopy.getInputFile().length()+"位花费时间为:"+(end1-start1)+"ms");fileCopy.getOutputFile().delete();long start2=System.currentTimeMillis();fileCopy.copy2();long end2=System.currentTimeMillis();System.out.println("边读边写复制文件大小为"+fileCopy.getInputFile().length()+"位花费时间为:"+(end2-start2)+"ms");}}

   经测试发现,对于读取文件的大小小于自身机器的内存时,采取方式1要比方式二快很多,但是若读取的文件大于自身内存则方式二好些。不过在这种情况下有更好的方式就是采取缓冲机制,读取一块,写入一块。结合了一和二的优点。

热点排行