【发布时间】:2011-06-21 23:50:52
【问题描述】:
我对简单的线处理感兴趣。
【问题讨论】:
-
在这个较新的相关问题中,对 JDK 的内置文件 IO 类有一个很好的介绍:stackoverflow.com/questions/19430071/…
我对简单的线处理感兴趣。
【问题讨论】:
扫描仪:
for(Scanner sc = new Scanner(new File("my.file")); sc.hasNext(); ) {
String line = sc.nextLine();
... // do something with line
}
【讨论】:
Scanner 提供。谢谢。简单干净。
看看Scanner 类。
它是在 Java 5 中添加的,以使读取字符串和文件比旧的 FileReaders 和 FileInputStream 链更容易(不再是 new BufferedReader(new FileReader()) 只是为了获得 readLine 方法)。
在 Scanner 类中,您可以使用 nextLine 方法一次读取一行,但它也有许多实用方法用于在文件中查找原语和正则表达式。
【讨论】:
你可以使用BufferedReader,像这样:-
try {
BufferedReader input = new BufferedReader(new FileReader(new File("c:\\test.txt")));
try {
String line = null;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} finally {
input.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
【讨论】:
try {...} finally { out.close() } - 关闭将由JVM完成,它会照顾好它。
如果您愿意使用3rd party libraries,那么诸如Files 来自Guava 或FileUtils 来自Apache Commons IO 的实用程序类可以让读取文件变得非常简单。
以下示例(其中File file = new File("path/to/file.txt"))将文本文件的所有行读入列表,并将整个文件读入字符串。
番石榴:
List<String> lines = Files.readLines(file, Charsets.UTF_8);
String contents = Files.toString(file, Charsets.UTF_8);
Apache Commons IO:
List<String> lines = FileUtils.readLines(file, "UTF-8");
String contents = FileUtils.readFileToString(file, "UTF-8")
我的推荐(截至 2013 年)是 Guava,这是一个现代、干净、积极维护的库。它通常比 Apache Commons 的东西质量更高。
当然,仅仅为此添加 Guava 是没有意义的,因为它是一个相对较大的库。另一方面,不今天在 Java 项目中使用 Guava 将是 IMO 愚蠢的。 :-)
诚然,JDK 现在为这个特定目的提供了一些足够的工具(Scanner);当something like this 是替代方案时,使用第 3 方库读取文件更合理。
【讨论】:
Apache commons 总是一个不错的起点。
【讨论】:
你可以试试 apache 的 FileUtils。方法如
for(String line: FileUtils.readLines(file)) {
System.out.println(line);
}
【讨论】:
您还可以使用包装在 BufferedReader 中的 InputStreamReader(使用像 FileInputStream 这样的 InputStream 创建)来简单地读取文件。
【讨论】: