122.字符缓冲流(BufferedReader&BufferedWriter)

字符缓冲流用于提升字符流操作的速度和效率,BufferedReader的效率通过readLine方法1 体现,BufferedWriter新增的方法2 是newLine函数,省去了手动加换行的麻烦3

BufferedReader和BufferedWriter最底层是节点流类FileReader和FileWriter4

BufferedReader

构造方法
Constructor Description
BufferedReader(Reader in) 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz) 创建一个使用指定大小的输入缓冲区的缓冲字符输入流。
接口方法
Modifier and Type Method Description
void close() 关闭流并释放与它相关联的任何系统资源。
Stream lines() 返回一个 Stream,其中的元素是线从这 BufferedReader读。
void mark(int readAheadLimit) 标记流中的当前位置。
boolean markSupported() 告诉这是否流支持的mark()操作,它。
int read() 读取单个字符。
int read(char[] cbuf, int off, int len) 将字符读入一个数组的一部分。
String readLine() 读一行文本。
boolean ready() 告诉是否该流已准备好阅读。
void reset() 将流到最近的标记。
long skip(long n) 跳过的字符。
BufferedReader示例代码
package cn.yzy.io;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class testBufferedReader {
     
	public static void main(String[] args) {
     
		//创建源
		File srcFile = new File("testBufferedReader.txt");
		try (BufferedReader read = new BufferedReader(new FileReader(srcFile));){
     
			//BufferedReader通过readLine逐行读取
			String line = null;
			while((line = read.readLine()) != null) {
     
				System.out.println(line);
			}
		} catch (FileNotFoundException e) {
     
			e.printStackTrace();
		} catch (IOException e) {
     
			e.printStackTrace();
		}
	}
}
发现从testBufferedReader.txt读取文本文件正确
122.字符缓冲流(BufferedReader&BufferedWriter)_第1张图片

BufferedWriter

构造方法
Constructor Description
BufferedWriter(Writer out) 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,该流使用给定大小的输出缓冲区。
接口方法
Modifier and Type Method Description
void close() 关闭流,冲洗它。
void flush() 冲流。
void newLine() 写行分隔符。
void write(char[] cbuf, int off, int len) 写入一个字符数组的一部分。
void write(int c) 写一个字符。
void write(String s, int off, int len) 写入字符串的一部分。
package cn.yzy.io;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class testBufferedWriter {
     
	public static void main(String[] args) {
     
		//创建源
		File srcFile = new File("testBufferedWriter.txt");
		try (BufferedWriter writer = new BufferedWriter(new FileWriter(srcFile))){
     
			writer.append("My baby my treasure i swear my forever");
			writer.newLine();
			writer.append("希望是火,失望是烟,生活就是一边点火,一边冒烟。晚安");
			writer.flush();
		} catch (FileNotFoundException e) {
     
			e.printStackTrace();
		} catch (IOException e) {
     
			e.printStackTrace();
		}
	}
}

发现字符串写入testBufferedWriter.txt正确5
122.字符缓冲流(BufferedReader&BufferedWriter)_第2张图片

通过字符缓冲流对文本文件同时完成读以及写

package cn.yzy.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class testCopyForTxtWithBufferWriterAndReader {
     
	public static void main(String[] args) {
     
		CopyFile("test.txt", "test-copy-bufferedRW.txt");
	}
	
	public static void CopyFile(String src, String dest) {
     
		//创建源和目的
		File srcFile = new File(src.toString());
		File destFile = new File(dest.toString()); //文件不存在会自动创建
		
		//选择流
		try(BufferedReader br = new BufferedReader(new FileReader(srcFile));
				BufferedWriter bw = new BufferedWriter(new FileWriter(destFile, true))) {
     
			/*
			 * FileWriter构造器第二个参数代表是否追加写
			 * FileWriter如果是覆盖写可以用第二个参数false,也可以用单参数构造方法默认就是覆盖 
			  *  第一个参数是File,第二个参数是boolean类型,true表示append
			 */
			
			//操作
			String datasString = null;
			while((datasString = br.readLine()) != null) {
     
				bw.write(datasString);
				bw.newLine();
			}
			bw.flush();
		} catch (FileNotFoundException e) {
     
			e.printStackTrace();
		} catch (IOException e) {
     
			e.printStackTrace();
		}
	}
}

发现与预期相符
122.字符缓冲流(BufferedReader&BufferedWriter)_第3张图片
  1. readLine属于新增方法,因此不能使用多态 ↩︎

  2. 相较于他的基类 ↩︎

  3. 根据所在的平台选择CR,LF或CRLF换行,换行符请参考换行符CR,LF和CRLF ASCII值请参考ASCII表 ↩︎

  4. 122.字符缓冲流(BufferedReader&BufferedWriter)_第4张图片 ↩︎

  5. newLine的换行也正确 ↩︎

你可能感兴趣的:(java)