在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);
获得适当的流相关方法。