似乎有不同的方法可以在 Java 中读取和写入文件数据。
我想从文件中读取 ASCII 数据。有哪些可能的方式及其区别?
原文由 Tim the Enchanter 发布,翻译遵循 CC BY-SA 4.0 许可协议
似乎有不同的方法可以在 Java 中读取和写入文件数据。
我想从文件中读取 ASCII 数据。有哪些可能的方式及其区别?
原文由 Tim the Enchanter 发布,翻译遵循 CC BY-SA 4.0 许可协议
我最喜欢读取小文件的方法是使用 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
}
原文由 Knubo 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
ASCII 是一个 TEXT 文件,因此您可以使用
Readers
进行阅读。 Java 还支持使用InputStreams
从二进制文件中读取。如果正在读取的文件很大,那么您可能希望在BufferedReader
之上使用FileReader
来提高读取性能。通过 这篇文章 了解如何使用
Reader
我还建议您下载并阅读这本精彩(但免费)的书,名为 Thinking In Java
在 Java 7 中:
(文档) 或
(文档)
在 Java 8 中:
(文档)