缓冲字符流:
java.io.BufferedWriter和java.io.BufferedReader
缓冲字符流是一对字符流,且是一对高级流。作用是提高读写文本数据的效率。
内部默认维护一个8k长度的char数组(注意,不是8kb!是一个8192长度的char数组)
java.io.PrintWriter具体自动行刷新功能的缓冲字符输出流。
其内部总是链接着BufferedWriter,并且可以按行写出字符串
支持直接对文件写操作的构造器 PrintWriter(File file) PrintWriter(String path) 上述构造器内部会进行四层流连接完成对文件的写出操作 重载构造器(推荐) PrintWriter(File file,String csn) PrintWriter(String path,String csn) 支持第二个参数来指定字符集的名称 不理想的地方:字符集名称需要用字符串自行指定
java.io.PrintWriter
PrintWriter pw=new PrintWriter("./pw.txt","UTF-8");
pw.println("HHH");
pw.println("666");
System.out.println("写出完毕!");
pw.close();
四层流连接
FileOutputStream fos=new FileOutputStream("pw.txt",true);
OutputStreamWriter osw=new OutputStreamWriter(fos, StandardCharsets.UTF_8);
BufferedWriter bw=new BufferedWriter(osw);
/*
PrintWriter提供了可以打开自动行刷新功能的构造器
当第一个参数为一个流时,就支持再传入一个boolean值,如果该值为true
则打开了自动行刷新,此时每当我们调用一次println方法,就会自动flush
*/
PrintWriter pw=new PrintWriter(bw,true);
java.io.BufferedReader * 特点: * 块读文本数据 * 可按行读取字符串
BufferedReader提供了一个独有的方法: String readLine() 该方法会返回读取到的一行字符串,返回的字符串中不含有最后的换行符。 如果单独读取了空行(这一行只有换行符),则返回值为空字符串 如果返回值为null,则表示流读取到了末尾。 当第一次调用readLine()读取一行字符串时 实际上:缓冲流会一次性读取8192个字符(char)并存入到其内部字符数组中(块读操作)。 再将其中的第一行字符串内容进行返回。 当我们第二次调用readLine()时,直接将内部char数组中第二行字符串内容返回。
FileInputStream fis=new FileInputStream("./src/IO/BRDemo.java");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
while ((br.readLine())!=null){
String line;
line=br.readLine();
System.out.println(line);
}
br.close();