我有两种方法可以使用FileReader和其他文件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);
}
和其他是
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);
}
虽然两者都给我输出......我只是想知道哪种方法最好。
答案 0 :(得分:21)
我强烈建议使用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);
答案 1 :(得分:2)
这两种方法都可以,因为您使用BufferedReader,与无缓冲方法相比,它可以极大地提高性能。在第二种情况下,不需要将DataInputStream包装在DataInputStream中。最后一种方法,让我们通过InputStreamReader指定文件编码,这通常是一件很重要的事情。
答案 2 :(得分:1)
这取决于,如果你想阅读一个只包含文本的文件(我的意思是文本文件),那么你应该使用第一种情况。
如果你想阅读一些代表二进制数据的文件(我的意思是图像文件或视频文件等),你应该使用第二种情况。
答案 3 :(得分:-1)
好吧,您最初从BufferedReader
创建了FileInputStream
。你应该这样做:
FileInputStream fstream = new FileInputStream("C:\\testnew\\out.text");
BufferedInputStream bstream = new BufferedInputStream(fstream);
获得与流相关的正确方法。