BufferedReader
介绍
BufferedReader
类是其他 Reader
类的包装器,有两个主要用途:
-
一个
BufferedReader
为包裹的Reader
提供缓冲。这允许应用程序一次读取一个字符而不会产生过多的 I / O 开销。 -
BufferedReader
提供一次读取一行文本的功能。
使用 BufferedReader 的基础知识
使用 BufferedReader
的正常模式如下。首先,你获得要从中读取字符的 Reader
。接下来,你将实例化一个包裹 Reader
的 BufferedReader
。然后你读取字符数据。最后你关闭 BufferedReader
,关闭包裹的`读者。例如:
File someFile = new File(...);
int aCount = 0;
try (FileReader fr = new FileReader(someFile);
BufferedReader br = new BufferedReader(fr)) {
// Count the number of 'a' characters.
int ch;
while ((ch = br.read()) != -1) {
if (ch == 'a') {
aCount++;
}
}
System.out.println("There are " + aCount + " 'a' characters in " + someFile);
}
你可以将此模式应用于任何 Reader
笔记:
-
我们使用 Java 7(或更高版本) try-with-resources 确保底层读者始终关闭。这可以避免潜在的资源泄漏。在早期版本的 Java 中,你将明确关闭
finally
块中的BufferedReader
。 -
try
区块内的代码几乎与我们直接从FileReader
中读取的代码相同。实际上,BufferedReader
的功能与它所包含的Reader
的功能完全相同。不同之处在于此版本的效率更高。
BufferedReader 缓冲区大小
BufferedReader.readLine()
方法
示例:将文件的所有行读入 List
这是通过获取文件中的每一行并将其添加到 List<String>
中来完成的。然后返回该列表:
public List<String> getAllLines(String filename) throws IOException {
List<String> lines = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
String line = null;
while ((line = reader.readLine) != null) {
lines.add(line);
}
}
return lines;
}
Java 8 使用 lines()
方法提供了一种更简洁的方法:
public List<String> getAllLines(String filename) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filename))) {
return br.lines().collect(Collectors.toList());
}
return Collections.empty();
}