【发布时间】:2011-06-02 14:14:10
【问题描述】:
使用 Commons 或 Guava 库将每一行文本(来自文本文件)放入 LinkedList(作为 String 对象)或其他一些集合中的最优雅的方法是什么。
【问题讨论】:
标签: java file text guava apache-commons
使用 Commons 或 Guava 库将每一行文本(来自文本文件)放入 LinkedList(作为 String 对象)或其他一些集合中的最优雅的方法是什么。
【问题讨论】:
标签: java file text guava apache-commons
我不确定您是否只想知道如何通过 Guava 或 Commons IO 执行此操作,但从 Java 7 开始,这可以通过 java.nio.file.Files.readAllLines(Path path, Charset cs) (javadoc) 完成。
List<String> allLines = Files.readAllLines(dir.toPath(), StandardCharsets.UTF_8);
由于这是 Java SE 的一部分,因此不需要您向项目中添加任何额外的 jar 文件(Guava 或 Commons)。
【讨论】:
你可以使用番石榴:
Files.readLines(new File("myfile.txt"), Charsets.UTF_8);
或者apache commons io:
FileUtils.readLines(new File("myfile.txt"));
我想说两者都同样优雅。
根据您的具体用途,假设“默认编码”可能是个好主意。无论哪种方式,我个人觉得 Guava API 清楚地表明您正在对文件的编码做出假设是很好的。
更新: Java 7 现在内置了这个:Files.readAllLines(Path path, Charset cs)。您还必须明确指定字符集。
【讨论】:
【讨论】:
这可能就是你要找的东西
【讨论】:
它们非常相似,使用 Commons IO 看起来像这样:
List<String> lines = FileUtils.readLines(new File("file.txt"), "UTF-8");
Guava 的主要优点是字符集的规范(没有拼写错误):
List<String> lines = Files.readLines(new File("file.txt"), Charsets.UTF_8);
【讨论】:
使用 org.apache.commons.io.FileUtils
FileUtils.readLines(new File("file.txt"));
【讨论】:
使用Apache Commons IO,可以使用FileUtils#readLines方法。很简单:
List<String> lines = FileUtils.readLines(new File("..."));
for (String line : lines) {
System.out.println(line);
}
【讨论】:
IOUtils.lineIterator 是更好的选择,因为它不会将整个文件加载到内存中。