问题
看起来有不同的方法来读取和写入 Java 文件的数据。
我想从文件中读取 ASCII 数据。
- 有几种实现方式?
- 它们的区别?
#1 热门回答(631 赞)
我最喜欢读取小文件的方法是使用 BufferedReader 和 StringBuilder。这非常简单并且重要(尽管不是特别有效,但对于大多数情况来说足够好):
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
有人指出,在Java 7之后,您应该使用try-with-resources(即自动关闭)功能:
try(BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
String everything = sb.toString();
}
当我读取这样的字符串时,我通常希望每行都进行一些字符串处理,然后我就去实现这个。
如果我只想将文件读入字符串,我总是使用 Apache Commons IO和类 IOUtils.toString()
方法。你可以在这里查看来源:
http://www.docjar.com/html/api/org/apache/commons/io/IOUtils.java.html
FileInputStream inputStream = new FileInputStream("foo.txt");
try {
String everything = IOUtils.toString(inputStream);
} finally {
inputStream.close();
}
使用 Java 7 更简单:
try(FileInputStream inputStream = new FileInputStream("foo.txt")) {
String everything = IOUtils.toString(inputStream);
// do something with everything string
}
#2 热门回答(462 赞)
ASCII 是一个TEXT 文件,因此您可以使用Readers进行阅读。 Java也支持使用InputStreams读取二进制文件。如果正在读取的文件很大,那么您会希望在 FileReader 中使用 BufferedReader来提高读取性能。
通过this article了解如何使用Reader
我还建议你下载并阅读这本精彩(但免费)的书,名为Thinking in Java
在Java 7中:
new String(Files.readAllBytes(...))orFiles.readAllLines(...)
在Java 8中:
Files.lines(..).forEach(...)
#3 热门回答(122 赞)
最简单的方法是使用Java中的Scanner
类和FileReader对象。简单的例子:
Scanner in = new Scanner(new FileReader("filename.txt"));
Scanner
有几种读取字符串,数字等的方法......您可以在Java文档页面上查找更多相关信息。
例如,将整个内容读入“String”中:
StringBuilder sb = new StringBuilder();
while(in.hasNext()) {
sb.append(in.next());
}
in.close();
outString = sb.toString();
另外如果你需要一个特定的编码,你可以使用下面的方法:
new InputStreamReader(new FileInputStream(fileUtf8), StandardCharsets.UTF_8)