用Java读取纯文本文件

新手上路,请多包涵

似乎有不同的方法可以在 Java 中读取和写入文件数据。

我想从文件中读取 ASCII 数据。有哪些可能的方式及其区别?

原文由 Tim the Enchanter 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 537
2 个回答

ASCII 是一个 TEXT 文件,因此您可以使用 Readers 进行阅读。 Java 还支持使用 InputStreams 从二进制文件中读取。如果正在读取的文件很大,那么您可能希望在 BufferedReader 之上使用 FileReader 来提高读取性能。

通过 这篇文章 了解如何使用 Reader

我还建议您下载并阅读这本精彩(但免费)的书,名为 Thinking In Java

在 Java 7 中

 new String(Files.readAllBytes(...))

(文档)

Files.readAllLines(...)

(文档)

在 Java 8 中

 Files.lines(..).forEach(...)

(文档)

原文由 Aravind Yarram 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题