小编典典

将文件读入字符串的最简单方法是什么?

all

我正在尝试将一个简单的文本文件读入一个字符串。当然,通常的方法是获取输入流并使用 readLine() 进行迭代并将内容读入 String。

过去已经这样做了数百次,我只是想知道如何以最少的代码行数做到这一点?java中没有像String fileContents = XXX.readFile(myFile/*File*/)..这样的东西吗?看起来像这样简单的东西?

我知道有像 Apache Commons IO 这样的库提供了这样的简化,甚至我可以编写一个简单的 Util 类来做到这一点。但我想知道的是 -
这是一个每个人都需要的如此频繁的操作,那么为什么 Java 不提供这么简单的功能呢?在某处真的没有一种方法可以将文件读入具有某种默认或指定编码的字符串吗?


阅读 68

收藏
2022-05-06

共1个答案

小编典典

是的,您可以在一行中执行此操作(尽管IOException您不希望进行稳健的处理)。

String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);

这使用 a
java.util.Scanner,告诉它用
分隔输入\Z,这是字符串锚点的结尾。这最终使输入具有一个实际标记,即整个文件,因此可以通过调用next().

一个构造函数接受
aFile和 a String charSetName(在许多其他重载中)。这两个构造函数可能会抛出FileNotFoundException,但像所有Scanner方法一样,IOException不能抛出超出这些构造函数的任何方法。

您可以通过该方法查询Scanner自身是否发生。您可能还想在阅读内容后明确说明,因此最好将引用存储在局部变量中。ioException()IOExceptionclose()Scanner``Scanner


第三方库选项

为了完整起见,如果您拥有这些非常有名且非常有用的第三方库,那么这些是一些非常好的选择:

番石榴

com.google.common.io.Files包含许多有用的方法。这里相关的是:

阿帕奇共享/ IO

org.apache.commons.io.IOUtils还提供类似的功能:

  • String toString(InputStream, String encoding)
    • 使用指定的字符编码,获取 an 的内容InputStream作为String
  • List readLines(InputStream, String encoding)
    • … 作为 的(原始)ListString每行一个条目
2022-05-06