使用Commons或Guava将文本文件导入Java List <String>

Mat*_* B. 14 java text file apache-commons guava

使用Commons或Guava库将每行文本(从文本文件)放入LinkedList(作为String对象)或其他集合的最优雅方法是什么.

Sea*_*oyd 28

以下是Guava的使用方法:

List<String> lines = Files.readLines(new File("myfile.txt"), Charsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)

参考:


Joã*_*lva 18

使用Apache Commons IO,您可以使用FileUtils#readLines方法.它很简单:

List<String> lines = FileUtils.readLines(new File("..."));
for (String line : lines) {
  System.out.println(line);  
}
Run Code Online (Sandbox Code Playgroud)

  • `IOUtils.lineIterator`是一个更好的选择,因为它不会将整个文件加载到内存中. (2认同)

Wou*_*rts 12

你可以使用番石榴:

Files.readLines(new File("myfile.txt"), Charsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)

或apache commons io:

FileUtils.readLines(new File("myfile.txt"));
Run Code Online (Sandbox Code Playgroud)

我会说两者都同样优雅.

根据您的确切用法,假设"默认编码"可能是个好主意.无论哪种方式,我个人认为Guava API清楚地表明您正在对文件的编码做出假设.

更新:Java 7现在内置了这个:Files.readAllLines(Path path,Charset cs).而且你也必须明确指定charset.


Pau*_*aul 7

使用org.apache.commons.io.FileUtils

FileUtils.readLines(new File("file.txt"));
Run Code Online (Sandbox Code Playgroud)


Joh*_*int 5

这可能就是你要找的东西

FileUtils.readLines(File file)


Fab*_*eeg 5

它们非常相似,Commons IO看起来像这样:

List<String> lines = FileUtils.readLines(new File("file.txt"), "UTF-8");
Run Code Online (Sandbox Code Playgroud)

Guava的主要优点是charset的规范(没有拼写错误):

 List<String> lines = Files.readLines(new File("file.txt"), Charsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)