use*_*058 15 java foreach file filereader line-by-line
我目前正在尝试从我拥有的纯文本文件中读取行.我发现另一个stackoverflow(用Java读取纯文本文件)你可以使用Files.lines(..).forEach(..)但是我实际上无法弄清楚如何使用for each函数来读取line by行文本,任何人都知道在哪里寻找或如何这样做?
par*_*085 27
test.txt的示例内容
Hello
Stack
Over
Flow
com
Run Code Online (Sandbox Code Playgroud)
使用lines()和forEach()方法从此文本文件中读取的代码.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class FileLambda {
public static void main(String JavaLatte[]) {
Path path = Paths.get("/root/test.txt");
try (Stream<String> lines = Files.lines(path)) {
lines.forEach(s -> System.out.println(s));
} catch (IOException ex) {
// do something or re-throw...
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
避免返回带有以下内容的列表:
List<String> lines = Files.readAllLines(path); //WARN
Run Code Online (Sandbox Code Playgroud)
请注意,Files::readAllLines调用时会读取整个文件,生成的 String 数组一次将文件的所有内容存储在内存中。因此,如果文件非常大,您可能会遇到OutOfMemoryError试图将其全部加载到内存中的情况。
改用流:使用Files.lines(Path)返回Stream<String>对象且不会遇到相同问题的方法。文件的内容被延迟读取和处理,这意味着在任何给定时间只有一小部分文件存储在内存中。
Files.lines(path).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
使用Java 8,如果文件存在于 a 中classpath:
Files.lines(Paths.get(ClassLoader.getSystemResource("input.txt")
.toURI())).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
Files.lines(Path)需要一个Path参数并返回一个Stream<String>。Stream#forEach(Consumer)期待一个Consumer论点。因此调用该方法,向其传递一个Consumer. 必须实现该对象才能为每行执行您想要的操作。
这是 Java 8,因此您可以使用 lambda 表达式或方法引用来提供参数Consumer。
| 归档时间: |
|
| 查看次数: |
52085 次 |
| 最近记录: |