BufferedReader和BufferedWriter(七)

勿以恶小而为之,勿以善小而不为--------------------------刘备

劝诸君,多行善事积福报,莫作恶

上一章简单介绍了 Scanner读取文件和输入数据(六),如果没有看过,请观看上一章

以前读取和写入文件内容时,用的Reader和Writer, 当调用 read() 或者 readLine() 方法时,效率是非常慢的。 如果能添加缓冲区,那么就非常好了。 BufferedReader 和 BufferedWriter ,就是在 Reader和 Writer 的基础上,添加了缓冲区, 即不仅具有Reader和Writer的各个功能,还能通过缓冲区进行相应的优化, 其实,这就是装饰器。

一. BufferedReader

从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。

一.一 方法

一.一.一 构造方法

一.一.一.一 方法

方法 作用
BufferedReader​(Reader in) 传入一个 Reader对象

其中,传入的这个 Reader 既可以是 FileReader 这样直接的对象,也可以是 InputStreamReader 这样转换过来的对象,有这两种常见形式。

建议采用第二种,转换流的方式。

一.一.一.二 演示

  @Test
    public void readConTest() throws Exception{

        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"rz.txt");
        //构造字符的  默认8192
        BufferedReader br=new BufferedReader(
                new FileReader(file),8192);

        //建议采用第二种方式
        BufferedReader br1=new BufferedReader(
            //跟转换流
                new InputStreamReader(new FileInputStream(file))
        );

    }

一.一.二 读取方法

方法 作用
void close​() 关闭流并释放与之相关联的任何系统资源
int read​() 读取一个字符
int read​(char[] cbuf, int off, int len) 读取 off到off+len的内容到 cbuf字符数据中,返回读取的内容
String readLine​() 读取一行文字,即按行读取, 回车符时结束

常常使用 readLine() 一行一行的读取,返回结果直接就是字符串,不用转换。

一.二 BufferedReader 演示

一.二.一 读取文件内容


    @Test
    public void readTest() throws Exception{

        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"Hello3.txt");
        //构造字符的  默认8192   8M 8M的读
        BufferedReader br=new BufferedReader(
                //跟转换流
                new InputStreamReader(new FileInputStream(file))
        );

        String temp="";
        while(null!=(temp=br.readLine())){
            System.out.println("输出行:"+temp);
        }
    }

运行程序,控制台打印出文件的内容:

有图片

一.二.二 读取控制台 System.in 输入

  public static void main(String[] args) throws Exception {
        readSystem();
    }
    public static void readSystem() throws Exception{

        System.out.println("请输入问候语:");
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        String password=br.readLine();

        System.out.println("输出问候语:"+password);
    }

运行程序:

有图片

二. BufferedWriter

二一 方法

二.一.一 构造方法

二.一.一.一 方法

方法 作用
BufferedWriter​(Writer out) 传入一个 Writer 对象

其中,传入的这个 Writer 既可以是 FileWriter 这样直接的对象,也可以是 InputStreamWriter 这样转换过来的对象,有这两种常见形式。

建议采用第二种,转换流的方式。

二.一.一.二 演示

 @Test
    public void writeConTest() throws Exception{

         File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"Hello3.txt");
        //第一种
        BufferedWriter bufferedWriter=new BufferedWriter(
                new FileWriter(file,true)
        );

        //最好是用第二种转换的

        BufferedWriter bufferedWriter1=new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(file))
        );
    }

二.一.二 写入方法

方法 作用
void close​() 关闭流,先刷新
void write​(int c) 写入一个字符
void write​(char[] cbuf, int off, int len) ) 写入字符数组中的一部分
void write​(String s, int off, int len) 写入字符串的一部分
void newLine​() 换行, 兼容不同系统

常常使用 write(String s, int off, int len) 直接写入字符串文本。

如果需要换行的话, 用 newLine() 方法进行换行。

二.二 BufferedWriter 演示

Hello3.txt 目前的文件内容是:

有图片

@Test
    public void writeTest() throws Exception{

        File file=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc"
                +File.separator+"Hello3.txt");

        BufferedWriter bufferedWriter1=new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(file))
        );

        //重启一行, 其实就是内部写 \r\n
        bufferedWriter1.newLine();

        bufferedWriter1.write("我是BufferedWriter写入的内容");
        bufferedWriter1.newLine();
        bufferedWriter1.write("Hello",2,3);

        bufferedWriter1.close();
    }

运行程序,查看 Hello3.txt 文件的内容(重写写入的)

有图片

谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章