zak*_*zak 9 java string java-8 java-stream
我正在尝试逐行读取一个长文件,并尝试同时从该行中提取一些信息.
这是我正在做的一个例子:
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.stream.Stream;
public class ReadFile_Files_Lines {
public static void main(String[] pArgs) throws IOException {
String fileName = "c:\\temp\\sample-1GB.txt";
File file = new File(fileName);
try (Stream<String> linesStream = Files.lines(file.toPath())) {
linesStream.forEach(line -> {
System.out.println(line);
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
我文件中的一行分为三部分:
10 1010101 15
Run Code Online (Sandbox Code Playgroud)
我希望每次都阅读这三个信息.喜欢 :
String str1 = line[0];
String str2 = line[1];
String str3 = line[2];
Run Code Online (Sandbox Code Playgroud)
如果我不将流转换为集合,我正在寻找的解决方案会更好.我将使用这3个String来创建图形数据结构,如:
createGraphe(str1,str2,str3);`
Run Code Online (Sandbox Code Playgroud)
我知道我可以发送完整的字符串,但是因为我正在学习Stream我很想知道如何提取这些信息.
谢谢.
您正在使用的方法lines()
已经达到了您期望的效果。
Java 8 在 Files 类中添加了一个新方法lines()
,可用于在 Java 中逐行读取文件。此方法的优点在于,它将文件中的所有行作为字符串流读取,并在消耗流时延迟填充。因此,如果您有一个巨大的文件,并且只读取前 100 行,则其余行将不会加载到内存中,从而获得更好的性能。
这与Files.readAllLines()
方法(将所有行读入列表)略有不同,因为此方法仅在 Stream 上调用终端操作时才延迟读取文件forEach()
,count()
例如 等。通过使用count()
方法,您实际上可以计算文件中的行数或通过过滤空行来获得空行数。
参考:https://javarevisited.blogspot.com/2015/07/3-ways-to-read-file-line-by-line-in.html
您可以通过拆分每一行映射到数组,然后调用所需的方法.
Files.lines(filePath)
.map(l -> l.split(" "))
.forEach(a -> createGraphe(a[0], a[1], a[2]));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6407 次 |
最近记录: |