该BufferedReader班是以外的包装Reader是有两个主要目的类:
ABufferedReader为包装的提供缓冲Reader。这允许应用程序一次读取一个字符,而不会产生过多的I / O开销。
一个BufferedReader用于一次读取文本行提供的功能。
使用a的正常模式BufferedReader如下。首先,获得Reader要从中读取字符的。接下来,您实例化一个BufferedReader包装了的Reader。然后,您读取字符数据。最后,关闭,BufferedReader然后关闭包装好的`Reader。例如:
File someFile = new File(...); int aCount = 0; try (FileReader fr = new FileReader(someFile); BufferedReader br = new BufferedReader(fr)) { // 计算“ a”字符的数量。 int ch; while ((ch = br.read()) != -1) { if (ch == 'a') { aCount++; } } System.out.println("有 " + aCount + " 'a' characters in " + someFile); }
您可以将此模式应用于任何 Reader
笔记:
我们使用Java 7(或更高版本)的try-with-resources来确保基础阅读器始终处于关闭状态。这样可以避免潜在的资源泄漏。在Java的早期版本中,您将显式关闭BufferedReaderinfinally块。
该try块内的代码实际上与直接从读取的代码相同FileReader。实际上,BufferedReader与Reader包装的函数完全一样的函数也会起作用。不同之处在于此版本的效率更高。
这是通过获取文件中的每一行并将其添加到中来完成的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(); }