在FileReader和InputStreamReader之间进行选择

Bas*_*tin 13 java java-io

我有两种方法可以使用FileReader和Other File InputStream读取java文件中的文本文件

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);
}
Run Code Online (Sandbox Code Playgroud)

和其他是

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);
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 21

强烈建议使用InputStreamReader而不是FileReader显式指定字符编码.这确实是使用的最大好处InputStreamReader(并且缺乏指定编码的能力FileReader是API中的一个主要漏洞,即IMO).

我也会删除"图层" DataInputStream- 只需将其传递FileInputStreamInputStreamReader构造函数.

在Java 8之前

或者,考虑使用Guava中的一些便利方法,这可以使这种事情变得更加简单.例如:

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

来自Java 8

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

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