Java--I/O流_2

常用类

FileReader

  • FileReader 字符输入流

    • new Filereader(File/String);
    • read:每次读取单个字符,返回该字符,如果到文件末尾返回-1
    • read(char[]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1
    • 相关API
      • new String(char[])将char[]转换成String
      • new String(char[],off,len)将char[]的指定部分转换成String
    @Test
        public void fileReader(){
            //创建一个FileReader对象
            FileReader fileReader = null;
           int data = 0;
            try {
                fileReader = new FileReader("D:\\a.txt");
                //循环读取
                while ((data = fileReader.read())!=-1) {
                    System.out.print((char)data);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
    						//关闭文件
                if(fileReader!=null){
                    try {
                        fileReader.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    

    FileWriter

  • FileWriter 字符输出流

    • new FileWriter(File/String):覆盖模式,相当于流的指针在首端
    • new FileWriter(File/String,true):追加模式,相当于流的指针在尾端
    • write(int) :写入单个字符
    • write(char[]) :写入指定数组
    • write(char[],off,len) :写入指定数组的指定部分
    • write(String):写入整个字符串
    • write(String,off,len):写入指定字符串的指定部分
    • 注意:FileWriter使用后,必须要关闭或刷新,否则写入不到指定的文件
    @Test
        public void fileWriter(){
            //要写入的数据
            String data = "过了很久终于我愿抬头看\n你就在对岸走的好慢";
            //创建一个FileWriter对象
            FileWriter fileWriter = null;
            try {
                fileWriter = new FileWriter("D:\\a.txt",true);
                fileWriter.write(data);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
    						//关闭文件
                if(fileWriter!=null){
                    try {
                        fileWriter.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    

    缓存是I/O的一种性能优化。缓存流为I/O增加了缓存区,使得在流上执行skip()、mark(),reset()方法成为可能

    节点流和处理流

    • 节点流可以从一个特定的数据源读写数据,如FileReader,FileWriter
    • 处理流是“连接”在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,如BufferedReader、BufferedWriter

BufferedReader

  • BufferedReader

    • 按照字符读取文件,尽量用来读取文本文件
    • 关闭时,只关闭外层流即可,底层会自动关闭节点流
    @Test
        public void BufferReader_() throws IOException {
            //建立路径
            String filePath = "D:\\a.txt";
            //创建BufferedReader对象
            BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath));
            //读取
            String line;
            //按行读取,返回为空是说明文件读取完毕
            while((line = bufferedReader.readLine())!=null){
                System.out.println(line);
            }
            //关闭流
            bufferedReader.close();
        }
    

BufferedWriter

  • BufferedWriter

    @Test
        public void BufferWriter_() throws IOException {
            //建立路径
            String filePath = "D:\\a.txt";
            //创建BufferedReader对象,true追加写入
            BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath,true));
    
            String line = "";
            bufferedWriter.write("过了很久终于我愿抬头看");
    				bufferedWriter.newLine();
            //关闭流
            bufferedWriter.close();
        }
    

文件拷贝

1.创建输入流对象,读取文件

2.创建输出流对象,将读取到的文件写入到指定文件

3.定义一个数组用来暂时储存文件数据,使用数组可以提高读取效率

4.因为不能一次性读取完,所以使用循环来读取

5.读取完记得关闭文件,以防占用资源

@Test
    public void copy(){
        //1.创建输入流对象,读取文件
        //2.创建输出流对象,将读取到的文件写入到指定文件

        String fileinPath = new String("D:\\1.jpg");
        String fileoutPath = new String("D:\\1\\1.jpg");
        FileInputStream fileinput = null;
        FileOutputStream fileoutput = null;

        //定义一个字节数组,提高读取效率
        byte []buffer = new byte[1024];
        //用来判断是否读到文件末尾
        int read = 0;
        try {
            fileinput = new FileInputStream(fileinPath);
            fileoutput = new FileOutputStream(fileoutPath);

            while((read=fileinput.read(buffer))!=-1){
                //边读边写
                fileoutput.write(buffer,0,read);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
						//关闭
            if(fileoutput!=null){
                try {
                    fileoutput.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fileinput!=null){
                try {
                    fileinput.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值