在FileReader和InputStreamReader之间进行选择

我有两种方法来读取文本文件在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 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 lines = Files.readAllLines(path); 

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

这取决于,如果你想读取一个只包含文本的文件(我的意思是文本文件),那么你应该使用第一种情况。

如果你想读一些代表二进制数据的文件(我的意思是图像文件或video文件等),你应该使用第二种情况。

好吧,你最初从FileInputStream创建一个BufferedReader 。 你应该这样做:

 FileInputStream fstream = new FileInputStream("C:\\testnew\\out.text"); BufferedInputStream bstream = new BufferedInputStream(fstream); 

获得适当的流相关方法。