使用IO流进行文件拷贝

需求:在项目的根目录里面创建一个java.txt的文件,然后将这个文件拷贝到file文件夹里面并且重命名为good.txt文件
先以流的方式将java.txt文件读取到内存中,然后再以流的方式将内存中的内容写出到硬盘里面

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
* 文件拷贝
* 将java.txt文件拷贝到file文件夹中
*
*/
public class FileCopy {

   public static void main(String[] args) {
       FileInputStream fis = null;
       FileOutputStream fos = null;
       try {
           fis = new FileInputStream("java.txt");
           fos = new FileOutputStream("file" + File.separator + "good.txt");

           byte[] arr = new byte[1024];
           int length;
           while((length = fis.read(arr)) != -1) {                
               fos.write(arr,0,length);
           }
       } catch (FileNotFoundException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } finally{
           try {
               fis.close();
               fos.close();
           } catch (IOException e) {
               e.printStackTrace();
           }

       }




   }    

}

使用缓冲流进行文件拷贝
Java中提供了BufferedInputStream和BufferedOutputStream缓冲流用来读取和写出, BufferedInputStream读取时会创建一个长度为8192的byte类型数组,程序一次读取8192个字节数据到数组中 使用缓冲流之后就不用再自定义byte类型数组了。


import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 使用缓冲流进行文件拷贝
 * 将java.txt文件拷贝到file文件夹中
 *
 */
public class BufferFileCopy {

    public static void main(String[] args) {
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            //使用缓冲流装饰一下
            bis = new BufferedInputStream(new FileInputStream("java.txt"));
            bos = new BufferedOutputStream(new FileOutputStream("file" + File.separator + "good.txt"));

            int temp;
            while((temp = bis.read()) != -1) {                
                bos.write(temp);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                bis.close();
                bos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }




    }    

}
Buffer缓冲.png
自定义数组缓冲.png

两者在效率上区别不大,其实java提供的BufferedInputStream和BufferedOutputStream底层使用的也是byte类型的数组,开发中这两种方式都可以使用。

jdk7的新写法
在jdk7中新加入了AutoCloseable接口,IO流中的类都实现了这个接口,这样在读取或者写出操作结束之后,系统会自动close相关资源,开发者不需要再手动close了


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * jdk7新写法,省去了close操作,系统会自动close
 * @author Administrator
 *
 */
public class IO7Style {

    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("monkey.txt");
                FileOutputStream fos = new FileOutputStream("rabbit.txt");) {
            int b;
            while ((b = fis.read()) != -1) {
                fos.write(b);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

你可能感兴趣的:(使用IO流进行文件拷贝)