java - 在 FileReader 和 InputStreamReader 之间进行选择

标签 java java-io

我有两种方法在 java 中读取文本文件,一种使用 FileReader 和其他文件 InputStream

FileReader fr=new FileReader("C:\\testq\\test.txt");
BufferedReader br=new BufferedReader(fr);
String s;
while((s=br.readLine())!=null){
    System.out.println("value are "+s);
}

其他是

FileInputStream fstream = new FileInputStream("C:\\testnew\\out.text");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null){
   System.out.println (strLine);
}

虽然两者都给我输出......我只是想知道哪种是最好的方法。

最佳答案

强烈建议使用 InputStreamReader 而不是 FileReader,但要明确指定字符编码。这确实是使用 InputStreamReader 的最大好处(并且无法为 FileReader 指定编码是 API 中的一个主要漏洞,IMO)。

我还会使用 DataInputStream 删除“层”——只需将 FileInputStream 传递给 InputStreamReader 构造函数。

Java 8 之前

或者,考虑使用 Guava 中的一些便捷方法这可以使这类事情很多变得更简单。例如:

File file = new File("C:\\testnew\\out.text");
List<String> lines = Files.readLines(file, Charsets.UTF_8));

来自 Java 8

Java 8 在 java.nio.files 中引入了一堆新类和方法,其中许多默认(明智地)为 UTF-8:

Path path = Paths.get("C:\\testnew\\out.text");
List<String> lines = Files.readAllLines(path);

关于java - 在 FileReader 和 InputStreamReader 之间进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9938520/

相关文章:

java - 防止 robot.mouseMove 生成​​ MouseEvent?

java - 在 Mac OS X 中使用 JFileChooser.showDialog(Component, String) 是否存在错误设置标题?

java - Java 中的字节流与字符流

java - File.length() 与 windows 不同,文件内容仍然相同吗?

java - 如何从搜索返回的元素列表中单击随机元素

java - 等价于M2E的Maven-> Gradle更新项目?

java - 如何使用一组点创建边界框?

java - 非阻塞写入Android中的套接字

java - java如何在内部将任何类型的文件(图像、pdf等)转换为字节数组?

java - java中如何从目录中顺序读取文件?