FileInputStream&FileOutputStream及文件复制

FileInputStream 优化

package com.lichennan.io;

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

/*
   int read(byte[] b)
       一次最多读取b.length 个字节。
       减少硬盘和内存交互,提高程序的执行效率。
       往byte[]数组当中读。
 */
public class FileInputStreamTest02 {
    public static void main(String[] args) {
        FileInputStream fis =null;
        try {
            //相对路径一定是从当前所在的位置作为起点开始做!
            //idea默认的当前路径在工程project的根目录
            //fis = new FileInputStream("tempfile");
            //相对路径
            //文本内容abcdef
            fis = new FileInputStream("E:\\学习\\Java\\LiChennan\\src\\com\\lichennan\\io\\tempfile");
            //开始读,采用byte数组,一次读取多个字节。最多读取“数组.length”个字节
            byte[] bytes = new byte[4];
            try {
               int readcount = 0;
               while ((readcount  = fis.read(bytes))!=-1){
                   System.out.print(new String(bytes,0,readcount));
               }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }finally {
            if(fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

在这里插入图片描述

FileOutputStream

package com.lichennan.io;

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

/*
   文件字节输出流,负责写。
   从内存到硬盘。
 */
public class FileOutputStreamTest03 {
    public static void main(String[] args) {
        FileOutputStream fos = null;
        try {
            //myfile文件不存在的时候会自动新建!
            //这种方式谨慎使用,这种方式会将原文件清空,然后重新写入
            //fos = new FileOutputStream("myfile");
            //以追加的方式在文件末尾写入。不会清空原文件内容。
            fos = new FileOutputStream("myfile",true);
            //开始写
            byte[] bytes = {97,98,99,100};
            //将byte数组全部写出!
            fos.write(bytes);
            fos.write(bytes,0,2);
            //字符串
            String s = "你是憨憨";
            //字符串转化为byte[]数组
            byte[] bs = s.getBytes();
            fos.write(bs);
            try {
                //写完之后刷新
                fos.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
}

文件的复制

package com.lichennan.io;

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

/*
  使用FileInputStream + FileOutputStream完成文件的拷贝
  拷贝的过程应该是一边读,一边写。
  使用以上的字节流拷贝文件的时候,文件类型随意,万能的。什么样的文件都能拷贝。
 */
public class Copy01 {
    public static void main(String[] args) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream("E:\\学习\\Java\\笔记\\Java学习路线.pdf");
            fos = new FileOutputStream("D:\\Java学习路线.pdf");

            //一边读,一边写
            byte[] bytes = new byte[1024*1024];
            int readCount = 0;
            try {
                while ((readCount = fis.read(bytes))!=-1){
                    fos.write(bytes,0,readCount);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fos.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            //分开try,不用一起try
            if (fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46554776/article/details/106267600