美文网首页
使用IO流进行文件拷贝

使用IO流进行文件拷贝

作者: 张轻舟 | 来源:发表于2019-06-06 14:14 被阅读0次

    需求:在项目的根目录里面创建一个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流进行文件拷贝

          本文链接:https://www.haomeiwen.com/subject/rbzyxctx.html