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

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

上一章简单介绍了 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);
}
}

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

BufferedReader和BufferedWriter(七)_Java的IO流

一.二.二 读取控制台 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);
}

运行程序:

BufferedReader和BufferedWriter(七)_文件操作_02

二. 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 目前的文件内容是:

BufferedReader和BufferedWriter(七)_文件缓冲字符流_03

@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 文件的内容(重写写入的)

BufferedReader和BufferedWriter(七)_文件操作_04

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