001BIO的基本使用

对流的理解
在这里插入图片描述

package io;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class MyIO {
    public static void main(String[] args) throws Exception {
//        writer001();
//        writer002();
//        reader001();
//reader002();
//        copy001();
copy002();

    }

    private static void writer002() throws Exception {
        //传递一个true参数,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写
        FileWriter fw = new FileWriter("1.txt",true);

        fw.write("续写传奇吗?");

        fw.close();

    }

    private static void copy002() throws Exception {
        FileReader reader = new FileReader("1.txt");
        FileWriter writer = new FileWriter("22.txt");
        char[] arr = new char[1433];
        int res = 0 ;
        while ((res = reader.read(arr)) != -1) {
            writer.write(arr);
        }
        reader.close();
        writer.close();
    }

    private static void copy001() throws Exception {
        FileReader reader = new FileReader("1.txt");
        FileWriter writer = new FileWriter("11.txt");
        int res = 0 ;
        while ((res = reader.read()) != -1) {
            writer.write(res);
        }
        reader.close();
        writer.close();
    }

    private static void reader002() throws Exception {
        FileReader fileReader = new FileReader("src\\main\\java\\bio\\BIOServer.java");
//        bio.BIOServer
        int res = 0;
        char[] arr = new char[1234];
        while ((res = fileReader.read(arr)) != -1) {
            System.out.print(new String(arr,0,res));
        }
        fileReader.close();

        }

    private static void reader001() throws Exception {
        FileReader fileReader = new FileReader("reader.txt");
        int res =0;
        while ((res = fileReader.read()) != -1) {
            System.out.println("(char)res = " + (char)res);
        }

        fileReader.close();

    }

    private static void writer001() throws IOException {
        FileWriter fileWriter = new FileWriter("reader.txt");
        fileWriter.write("十年磨一剑");
        fileWriter.flush();
        fileWriter.write("先苦后甜");
        fileWriter.close();
        //        fileWriter.write("先苦后甜");

    }
}

以上是字符流的基本使用

加入缓冲

package io;

import java.io.*;

public class MyBufferIO {

    public static void main(String[] args) throws Exception {
//        write001();
//        reader001();
//        copy001();
        myread();
    }

    private static void myread() throws Exception {
        MyReadLine myReadLine = new MyReadLine(new FileReader("1.txt"));
//        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bufer.txt"));
        String res = null;
        while ((res = myReadLine.line()) != null) {
            System.out.println("res = " + res);
//            bufferedWriter.write(res);
//            bufferedWriter.newLine();//这个就是为了配合reader的。
//            bufferedWriter.flush();
        }
        myReadLine.close();
//        bufferedWriter.close();

    }

    private static void copy001() throws Exception {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("1.txt"));
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("bufer.txt"));
        String res = null;
        while ((res = bufferedReader.readLine()) != null) {
            bufferedWriter.write(res);
            bufferedWriter.newLine();//这个就是为了配合reader的。
            bufferedWriter.flush();
        }
        bufferedReader.close();
        bufferedWriter.close();
    }

    private static void reader001() throws Exception {
        FileReader reader = new FileReader("312.txt");

        BufferedReader bufferedReader = new BufferedReader(reader);
        String res = null;
        while ((res=bufferedReader.readLine())!=null) {//以前是用-1 判断。现在用null来判断。返回的是String了。就这么一个差别
            System.out.println("res = " + res);//不会读取到换行啊,必须要用println
        }
        reader.close();
    }

    private static void write001() throws Exception {
        FileWriter wr = new FileWriter("312.txt");
        BufferedWriter bufferedWriter = new BufferedWriter(wr);
        bufferedWriter.write("用缓存看看,其实主要是换行");
        bufferedWriter.newLine();//和不缓存之前比,就是多了一个换行功能。
        bufferedWriter.write("换行了没啊?");
        bufferedWriter.flush();
        bufferedWriter.close();
    }
}

自己写缓冲
package io;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class MyReadLine extends Reader{
    Reader fileReader;

    public MyReadLine(Reader fileReader) {
        this.fileReader = fileReader;
    }

    public  String line() throws Exception {
        StringBuilder sb = new StringBuilder();
        int res = 0;
        while ((res = fileReader.read()) != -1) {
            if (res =='\r') {
                continue;
            }
            if (res == '\n') {
                return sb.toString();
            }else {

                sb.append((char) res);
            }
        }

        return sb.length()==0?null:sb.toString();

    }

    @Override
    public int read(char[] cbuf, int off, int len) throws IOException {
        return fileReader.read(cbuf, off, len);

    }

    public void close() throws IOException {
        fileReader.close();
    }
}

这里其实是为了扩展,扩展的是一类东西。以后新增都没问题。

自己写一个numline

class MyNumLine extends MyReadLine {
    private int count;
    public MyNumLine(Reader fileReader) {
        super(fileReader);
    }

    @Override
    public String line() throws Exception {
        count++;
        return super.line();
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }
}


  private static void myLineRead() throws Exception {
        MyNumLine myNumLine = new MyNumLine(new FileReader("1.txt"));
        String res = null;

        myNumLine.setCount(19);
        while ((res = myNumLine.line()) != null) {
            System.out.println(myNumLine.getCount()+":"+res);

        }

    }

效果和本来的一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值