java IO流之缓冲字符流BufferedReader BufferedWriter 方法 实例 LineNumberReader加行号
BufferedReader
- 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
- 建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
构造方法摘要
- BufferedReader(Reader in)
- 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
- BufferedReader(Reader in, int sz)
- 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
方法
Modifier and Type | Method | Description |
---|---|---|
void | close() | 关闭该流并释放与之关联的所有资源。 |
void | mark(int readAheadLimit) | 标记流中的当前位置。 |
boolean | markSupported() | 判断此流是否支持 mark() 操作(它一定支持)。 |
int | read() | 读取单个字符。 |
int | read(CharBuffer target) | 将字符读入指定的字符缓冲区。 |
int | read(char[] cbuf) | 将字符读入数组。 |
int | read(char[] cbuf, int off, int len) | 将字符读入数组的某一部分。 |
String | readLine() | 读取一个文本行。 |
boolean | ready() | 判断此流是否已准备好被读取。 |
void | reset() | 将流重置到最新的标记。 |
long | skip(long n) | 跳过n个字符。返回实际跳过的字符数 |
- 从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
LineNumberReader
java.lang.Object
java.io.Reader
java.io.BufferedReader
java.io.LineNumberReader
BufferedReader直接子类
-
跟踪行号的缓冲字符输入流。此类定义了方法
setLineNumber(int)
和getLineNumber()
,它们可分别用于设置和获取当前行号。public int getLineNumber()
获得当前行号。public void setLineNumber(int lineNumber)
设置当前行号。
-
默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用 setLineNumber(int) 更改行号。但要注意的是,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。
-
可认为行在遇到以下符号之一时结束:换行符(’\n’)、回车符(’\r’)、回车后紧跟换行符。
BufferedWriter
- 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
-
该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性
line.separator
定义。并非所有平台都使用新行符 (’\n’) 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。 -
通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)
构造方法摘要
- 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) | 写入字符串的某一部分。 |
void | write(char[] cbuf) | 写入字符数组cbuf。 |
void | write(String str) | 写入字符串str。 |
Write | append(char c) | 将指定字符c添加到此 writer。 |
Writer | append(CharSequence csq) | 将指定字符序列csq添加到此 writer。 |
Writer | append(CharSequence csq, int start, int end) | 将指定字符序列的子序列添加到此 writer。 |
- 从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
分步实现
-
创建源文件与目标文件实例
//1.创建源文件与目标文件实例 File f1 = new File("IOStream/src/testfile/test.txt"); File f2 = new File("IOStream/src/testfile/demo.txt");
-
创建字符流对象FileReader/Writer
//2.FileReader/Writer创建字符流对象 FileReader fr = new FileReader(f1); FileWriter fw = new FileWriter(f2);
-
功能加强,在FileReader/Writer外面套一个管:BufferedReader/Writer
//3.功能加强,在FileReader/Writer外面套一个管:BufferedReader/Writer BufferedReader br = new BufferedReader(fr); BufferedWriter bw =