我正在尝试将一个简单的文本文件读入一个字符串。当然,通常的方法是获取输入流并使用 readLine() 进行迭代并将内容读入 String。
过去已经这样做了数百次,我只是想知道如何以最少的代码行数做到这一点?java中没有像String fileContents = XXX.readFile(myFile/*File*/)..这样的东西吗?看起来像这样简单的东西?
String fileContents = XXX.readFile(myFile/*File*/)
我知道有像 Apache Commons IO 这样的库提供了这样的简化,甚至我可以编写一个简单的 Util 类来做到这一点。但我想知道的是 - 这是一个每个人都需要的如此频繁的操作,那么为什么 Java 不提供这么简单的功能呢?在某处真的没有一种方法可以将文件读入具有某种默认或指定编码的字符串吗?
是的,您可以在一行中执行此操作(尽管IOException您不希望进行稳健的处理)。
IOException
String content = new Scanner(new File("filename")).useDelimiter("\\Z").next(); System.out.println(content);
这使用 a java.util.Scanner,告诉它用 分隔输入\Z,这是字符串锚点的结尾。这最终使输入具有一个实际标记,即整个文件,因此可以通过调用next().
java.util.Scanner
\Z
next()
有一个构造函数接受 aFile和 a String charSetName(在许多其他重载中)。这两个构造函数可能会抛出FileNotFoundException,但像所有Scanner方法一样,IOException不能抛出超出这些构造函数的任何方法。
File
String charSetName
FileNotFoundException
Scanner
您可以通过该方法查询Scanner自身是否发生。您可能还想在阅读内容后明确说明,因此最好将引用存储在局部变量中。ioException()IOExceptionclose()Scanner``Scanner
ioException()
close()
Scanner``Scanner
为了完整起见,如果您拥有这些非常有名且非常有用的第三方库,那么这些是一些非常好的选择:
com.google.common.io.Files包含许多有用的方法。这里相关的是:
com.google.common.io.Files
String toString(File, Charset)
String
List<String> readLines(File, Charset)
List<String>
org.apache.commons.io.IOUtils还提供类似的功能:
org.apache.commons.io.IOUtils
String toString(InputStream, String encoding)
InputStream
List readLines(InputStream, String encoding)
List