122.字符缓冲流(BufferedReader&BufferedWriter)
程序员文章站
2024-03-06 16:26:14
...
字符缓冲流用于提升字符流操作的速度和效率,BufferedReader的效率通过readLine方法[readLine属于新增方法,因此不能使用多态]体现,BufferedWriter新增的方法[相较于他的基类]是newLine函数,省去了手动加换行的麻烦1
BufferedReader和BufferedWriter最底层是节点流类FileReader和FileWriter2
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读取文本文件正确
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正确3
通过字符缓冲流对文本文件同时完成读以及写
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();
}
}
}
发现与预期相符
-
根据所在的平台选择CR,LF或CRLF换行,换行符请参考换行符CR,LF和CRLF ASCII值请参考ASCII表 ↩︎
-
newLine的换行也正确 ↩︎
推荐阅读
-
122.字符缓冲流(BufferedReader&BufferedWriter)
-
java基础回顾之 流(BufferedReader/BufferedWriter )字符缓冲流, 默认有8192个字符的缓冲区
-
(三)IO流——缓冲字节流、缓冲字符流、转换流
-
字符缓冲输出流BufferedWriter与字符缓冲输入流BufferedReader:
-
javaSE25-- IO流--字符缓冲流BufferedReader/BufferedWriter
-
[重学Java基础][Java IO流][Part.2]缓冲字符输入输出流
-
字节缓冲流、转换流、字符流
-
字符输出缓冲流BufferedOutputStream
-
IO_处理流_字符缓冲流
-
java基础之--缓冲流-字节流+字符流+转换流+序列化+打印流