在 Java 中读取纯文本文件
似乎在Java中有不同的方法来读取和写入文件的数据。
我想从文件中读取 ASCII 数据。可能的方法及其区别是什么?
似乎在Java中有不同的方法来读取和写入文件的数据。
我想从文件中读取 ASCII 数据。可能的方法及其区别是什么?
我最喜欢的读取小文件的方法是使用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(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
}
ASCII 是一个 TEXT 文件,因此您可以使用 Reader
进行阅读。Java还支持使用 InputStreams
读取二进制文件。如果正在读取的文件很大,那么您需要在FileReader之上使用BufferedReader
来提高读取性能。
阅读本文,了解如何使用Reader
我还建议您下载并阅读这本精彩(但免费)的书,名为Thinking In Java。
在Java 7中:
new String(Files.readAllBytes(...))
(文档)或
Files.readAllLines(...)
在Java 8中:
Files.lines(..).forEach(...)