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

在过去做了数百次之后,我只是想知道如何用最少的代码行来完成这个任务?java中没有类似String fileContents = XXX.readFile(myFile/*File*/) ..而是像这样简单的东西?

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


当前回答

使用Apache Commons IO。

import org.apache.commons.io.FileUtils;

//...

String contents = FileUtils.readFileToString(new File("/path/to/the/file"), "UTF-8")

您可以在de javadoc中查看该方法的详细信息。

其他回答

很遗憾,没有。

我同意这样频繁的操作应该比在循环中逐行复制输入更容易实现,但您必须要么编写helper方法,要么使用外部库。

这应该对你有用:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public static void main(String[] args) throws IOException {
    String content = new String(Files.readAllBytes(Paths.get("abc.java")));
}

不要写你自己的util类来做这件事——我建议使用Guava,它充满了各种各样的好处。在这种情况下,你需要Files类(如果你真的只是读取一个文件)或CharStreams来进行更通用的读取。它具有将数据读入字符串列表(readLines)或totally (toString)的方法。

它对二进制数据也有类似的有用方法。然后还有图书馆的其他部分……

我同意在标准库中没有类似的东西是令人恼火的。见鬼,只要能够为FileReader提供一个CharSet,就会让生活变得简单一些……

另一种替代方法是:

如何从文件的内容创建Java字符串?

另一种选择是使用开放源码库提供的实用程序 http://commons.apache.org/io/api-1.4/index.html?org/apache/commons/io/IOUtils.html

为什么java不提供这样一个通用的util API ? a)保持api的通用性,以便编码、缓冲等由程序员处理。 b)让程序员做一些工作,编写/共享开源util库:D;-)

你可以使用apache commons IO..

FileInputStream fisTargetFile = new FileInputStream(new File("test.txt"));

String targetFileStr = IOUtils.toString(fisTargetFile, "UTF-8");