我试图将一个简单的文本文件读入字符串。当然,通常有获取输入流并使用readLine()迭代并将内容读入String的方法。
在过去做了数百次之后,我只是想知道如何用最少的代码行来完成这个任务?java中没有类似String fileContents = XXX.readFile(myFile/*File*/) ..而是像这样简单的东西?
我知道有像Apache Commons IO这样的库可以提供这样的简化,甚至我可以写一个简单的Util类来做这件事。但我想知道的是——这是一个如此频繁的操作,每个人都需要,那么为什么Java不提供这样简单的函数?难道真的没有一个方法可以将文件读入具有默认或指定编码的字符串吗?
是的,您可以在一行中完成(尽管对于健壮的IOException处理,您不希望这样做)。
String content = new Scanner(new File("filename")).useDelimiter("\\Z").next();
System.out.println(content);
这使用java.util。扫描器,告诉它用\Z分隔输入,这是字符串锚的结束。这最终使输入有一个实际的令牌,即整个文件,因此可以通过调用next()读取它。
有一个构造函数接受一个File和一个String charSetName(在许多其他重载中)。这两个构造函数可能会抛出FileNotFoundException,但是像所有的Scanner方法一样,除了这些构造函数之外,不能抛出IOException。
你可以通过ioException()方法查询扫描器本身是否发生ioException。您可能还希望在读取内容后显式地关闭()Scanner,因此可能将Scanner引用存储在局部变量中是最好的。
另请参阅
Java教程- I/O要点-扫描和格式化
相关问题
使用java.util.Scanner验证输入——有许多更典型的用法示例
第三方库选项
为了完整起见,如果你有这些非常有信誉和非常有用的第三方库,这些是非常好的选择:
番石榴
files包含许多有用的方法。相关的有:
字符串toString(文件,字符集)
使用给定的字符集,将文件中的所有字符读入String
List<String> readLines(File, Charset)
... 将文件中的所有行读入List<String>,每行一项
Apache Commons / 1
ioutils也提供类似的功能:
String toString(输入流,字符串编码)
使用指定的字符编码,以字符串形式获取InputStream的内容
列出readLines(输入流,字符串编码)
... 作为字符串的(原始)列表,每行一个条目
相关问题
最有用的免费第三方Java库(已删除)?