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

2022-08-31 05:20:40

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

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

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


答案 1

是的,您可以在一行中执行此操作(尽管对于强大的处理,您不希望这样做)。IOException

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

这使用 java.util.Scanner,告诉它用 分隔输入,这是字符串锚点的末尾。这最终使输入具有一个实际的令牌,即整个文件,因此可以通过一次调用来读取它。\Znext()

一个构造函数采用 a 和 a(在许多其他重载中)。这两个构造函数可以抛出 ,但像所有方法一样,没有可以抛出这些构造函数之外。FileString charSetNameFileNotFoundExceptionScannerIOException

您可以通过ioException()方法查询自身,如果发生或没有发生。您可能还希望在阅读内容后显式关闭(),因此最好将引用存储在局部变量中。ScannerIOExceptionScannerScanner

另请参见

相关问题


第三方库选项

为了完整性,如果您有这些非常有信誉且非常有用的第三方库,这些是一些非常好的选择:

番石榴

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

Apache Commons/IO

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

  • String toString(InputStream, String encoding)
    • 使用指定的字符编码,获取 a 的内容作为InputStreamString
  • List readLines(InputStream, String encoding)
    • ...作为 (原始) 的 ,每行一个条目ListString

相关问题


答案 2

从Java 7(API描述)开始,您可以执行以下操作:

new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);

其中 filePath 是一个字符串,表示要加载的文件。