【问题标题】:What are the best/simplest classes used for reading files in Java?用于在 Java 中读取文件的最佳/最简单的类是什么?
【发布时间】:2011-06-21 23:50:52
【问题描述】:

我对简单的线处理感兴趣。

【问题讨论】:

标签: java file file-io


【解决方案1】:

扫描仪:

for(Scanner sc = new Scanner(new File("my.file")); sc.hasNext(); ) {
  String line = sc.nextLine();
  ... // do something with line
}

【讨论】:

  • 喜欢各种各样的方法,Scanner 提供。谢谢。简单干净。
【解决方案2】:

看看Scanner 类。

它是在 Java 5 中添加的,以使读取字符串和文件比旧的 FileReaders 和 FileInputStream 链更容易(不再是 new BufferedReader(new FileReader()) 只是为了获得 readLine 方法)。

在 Scanner 类中,您可以使用 nextLine 方法一次读取一行,但它也有许多实用方法用于在文件中查找原语和正则表达式。

【讨论】:

  • @Maxym:这个答案需要补充一个使用示例。谢谢。
【解决方案3】:

你可以使用BufferedReader,像这样:-

try {
    BufferedReader input = new BufferedReader(new FileReader(new File("c:\\test.txt")));
    try {
        String line = null;
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
    } finally {
        input.close();
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

【讨论】:

  • 扫描仪似乎更简单,有更多选择。但是感谢您将必要的代码放在这里。 +1
  • 只是“顺便说一句”,当Java7来时,它会有“自动资源管理”,这意味着我们不需要try {...} finally { out.close() } - 关闭将由JVM完成,它会照顾好它。
【解决方案4】:

如果您愿意使用3rd party libraries,那么诸如Files 来自GuavaFileUtils 来自Apache Commons IO 的实用程序类可以让读取文件变得非常简单。

以下示例(其中File file = new File("path/to/file.txt"))将文本文件的所有行读入列表,并将整个文件读入字符串。

番石榴:

List<String> lines = Files.readLines(file, Charsets.UTF_8);

String contents = Files.toString(file, Charsets.UTF_8);

Apache Commons IO:

List<String> lines = FileUtils.readLines(file, "UTF-8");

String contents = FileUtils.readFileToString(file, "UTF-8")

我的推荐(截至 2013 年)是 Guava,这是一个现代、干净、积极维护的库。它通常比 Apache Commons 的东西质量更高。

当然,仅仅为此添加 Guava 是没有意义的,因为它是一个相对较大的库。另一方面,今天在 Java 项目中使用 Guava 将是 IMO 愚蠢的。 :-)

诚然,JDK 现在为这个特定目的提供了一些足够的工具(Scanner);当something like this 是替代方案时,使用第 3 方库读取文件更合理。

【讨论】:

  • 我确实试图不使用第 3 方库。但是,我以前听说过那个图书馆。它似乎正在获得认可。
  • @约翰。呵呵,“获得认可”可能是一种表达方式。我的经验是,自 00 年代初以来,Apache Commons 的库一直是典型 Java 项目的中流砥柱(最近加入/被谷歌的库取代,例如 Guava)。当然,在添加依赖项之前应该仔细考虑,但是像 Commons IO 这样的东西通常会很容易发挥作用。
【解决方案5】:

Apache commons 总是一个不错的起点。

http://commons.apache.org/io/

【讨论】:

    【解决方案6】:

    你可以试试 apache 的 FileUtils。方法如

    for(String line: FileUtils.readLines(file)) {
       System.out.println(line);
    }
    

    【讨论】:

      【解决方案7】:

      您还可以使用包装在 BufferedReader 中的 InputStreamReader(使用像 FileInputStream 这样的 InputStream 创建)来简单地读取文件。

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 2010-09-15
        • 1970-01-01
        相关资源
        最近更新 更多