有人能解释一下班级BufferedReader
,FileReader
和Scanner
之间的区别吗?当我想阅读文本文件时使用哪一个?
答案 0 :(得分:15)
好:
FileReader
只是Reader
,使用平台默认编码(urgh)读取文件BufferedReader
是另一个Reader
的包装,添加缓冲和一次读取一行的能力Scanner
从各种不同的来源读取,但通常用于交互式输入。就个人而言,我发现Scanner
的API非常痛苦和模糊。要阅读文本文件,我建议使用FileInputStream
包裹InputStreamReader
(以便您可以指定编码),然后将其包裹在BufferedReader
中以进行缓冲和修复一次读一行。
或者,您可以使用更简单的第三方库,例如Guava:
File file = new File("foo.txt");
List<String> lines = Files.readLines(file, Charsets.UTF_8);
或者,如果您使用的是Java 7,java.nio.file.Files
已经可以使用它了:
Path path = FileSystems.getDefault().getPath("foo.txt");
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
答案 1 :(得分:1)
根据您阅读文本文件的问题,您应该使用BufferedReader
,因为Scanner
会隐藏 IOException ,而BufferedReader
会抛出它立即。
BufferedReader
已同步,而Scanner
则不是。
Scanner
用于从流的内容中解析令牌。
BufferedReader
只是读取流。
有关详细信息,请点击链接(http://en.allexperts.com/q/Java-1046/2009/2/Difference-Scanner-Method-Buffered.htm)