带有缓冲区的流:
字节:
BufferedInputStream;
BufferedOutputStream;
字符:
BufferedReader; 带有缓冲区的字符输入流
BufferedWriter; 带有缓冲区的字符输出流
注:接下来以其中一组为例说明
节点流示意图
包装流示意图
BufferedReader:带有缓冲区的字符输入流
package com.company01.IO;
import java.io.*;
/*
字节:
BufferedInputStream;
BufferedOutputStream;
字符:
BufferedReader; 带有缓冲区的字符输入流
BufferedWriter; 带有缓冲区的字符输出流
*/
public class BufferedReaderTest01 {
public static void main(String[] args) throws Exception{
/*
// 创建一个带有缓冲区的字符输入流
FileReader fr = new FileReader("text01.txt"); // 创建一个文件输入流
BufferedReader br = new BufferedReader(fr); // 将文件字符输入流包装成带有缓冲区的字符输入流
// 根据流出现的位置,流又可以分为:包装流或者处理流 和 节点流
// FileReader fr 是一个节点流
// BufferedReader br 是一个包装流,或者处理流
*/
// 可以合写成一句话
BufferedReader br = new BufferedReader(new FileReader("test01.txt"));
// 开始读
String temp = null;
while((temp = br.readLine())!= null){ // br.readLine()方法读取一行,但是行尾不带换行符
System.out.println(temp);
}
// 关闭
// 注意:关闭的时候只需要关闭最外层的包装流。(这里有一个装饰者模式)
br.close();
}
}
package com.company01.IO;
import java.io.*;
public class BufferedReaderTest02 {
public static void main(String[] args) throws Exception{
// 需求:创建一个带有缓冲区的字符输入流,但是这里只有一个不带缓冲区的字节输入流
// 字节输入流
FileInputStream fi = new FileInputStream("test01.txt"); // 文件字节输入流
// 转换流(将字节流转换成字符流)
// isr 相对于 fi而言是包装流,fi是节点流
InputStreamReader isr = new InputStreamReader(fi); // isr 是字符流
// 带缓冲区的字符流
// br 相对于 isr而言是白装流,isr是节点流
BufferedReader br = new BufferedReader(isr);
// 也可以合成一句话
// BufferedReader = new BufferedReader(new InputStreamReader(new FileReader("test01.txx")));
// 开始读
String temp = null;
while((temp=br.readLine()) != null){
System.out.println(temp);
}
// 关闭 关闭的时候只需要关闭最外层的包装流。(这里有一个装饰者模式)
br.close();
}
}
package com.company01.IO;
/*
接受用户输入: Scanner;
*/
import java.io.*;
import java.util.Scanner;
public class BufferedReaderTest03 {
public static void main(String[] args) throws Exception{
/*
// 以前的方式
Scanner s = new Scanner(System.in); // System.in是一个标准的输入流,默认接受键盘的输入
// 程序执行到此处停下来,等待用户的输入
String str= s.next(); // 以空格作为结束 输入:Hello World! 在控制栏上打印:Hello
System.out.println("您输入了:" + str);
*/
// 使用BufferedReader用来接受用户的输入
// BufferedReader()里面不能直接跟System.in
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 接受输入(每一次都接受一行)
String str = br.readLine();
System.out.println("您输入了:" + str);
// 关闭
br.close();
}
}
BufferedWriter:带有缓冲区的字符输出流
package com.company01.IO;
/*
BufferedWriter
*/
import java.io.*;
public class BufferedWriterTest01 {
public static void main(String[] args) throws Exception{
// 创建带有缓冲区的字符输出流
BufferedWriter bw = new BufferedWriter(new FileWriter("test03.txt"));
// 开始写
bw.write("奥运会!");
// 写入一个行分隔符 两种方法都行
bw.write("\n");
bw.newLine();
// 刷新
bw.flush();
// 关闭
bw.close();
}
}
package com.company01.IO;
/*
使用BufferedReader和BufferedWriter完成复制
*/
import java.io.*;
public class BufferedWriterTest02 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new FileReader("test01.txt"));
BufferedWriter bw = new BufferedWriter((new OutputStreamWriter(new FileOutputStream("test03.txt"))));
String temp = null;
while((temp = br.readLine()) != null){ // br.readLine()不带有换行符
bw.write(temp);
bw.newLine();
}
bw.flush();
bw.close();
}
}