在 FileReader 和 InputStreamReader 之间进行选择

2022-09-03 01:07:18

我有两种方法来读取Java中的文本文件,一种使用FileReader和其他文件输入流

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);
}

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


答案 1

强烈建议使用 代替 ,但明确指定字符编码。这确实是使用的最大好处(缺乏指定编码的能力是API,IMO中的一个主要漏洞)。InputStreamReaderFileReaderInputStreamReaderFileReader

我还会使用“层”删除 - 只需将传递给构造函数即可。DataInputStreamFileInputStreamInputStreamReader

在 Java 8 之前

或者,考虑在番石榴中使用一些方便的方法,这可以使这种事情变得更加简单。例如:

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

来自 Java 8

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

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

答案 2

这两种方法都可以,因为您使用的是 BufferedReader,与无缓冲区方法相比,它大大提高了性能。在第二种情况下,不需要将 FileInputStream 包装在 DataInputStream 中。最后一种方法,让我们通过 InputStreamReader 指定文件编码,这通常是一件重要的事情。


推荐