使用 java 8 从文件中读取数据块
Read chunk of data from a file using java 8
我需要使用 java 来读取一个文本文件 8. 我可以读取整个文件。但我的问题是如何只读取文件的一部分。
示例:
我需要读取 {AAAA} {/AAAA}
之间的数据。我如何使用 java 8 及更旧版本执行此操作?
{AAAA}
This is the detailed description. This needs to be printed in the book
{/AAAA}
{BBBB}
Sample Code 1
Sample Code 2
Sample Code 3
{/BBBB}
试试这个:
try
{
BufferedReader br = new BufferedReader(new FileReader(new File(myFile)));
while(!((content=br.readLine()).equals("{/AAAA}")))
{
System.out.println(content);
}
}
catch(Exception e)
{
}
您可以使用 Files.lines(Path)
or Files.lines(Path, Charset)
来流式传输所有行。
读取机制 - 例如读取从“{AAAA}”到“{/AAAA}”的所有行必须由您实现。
你能做的最好的事情就是逐行阅读你的文件,直到你通过这样做达到你的模式:
try (BufferedReader br = new BufferedReader(
new InputStreamReader(new File(file), charset))
) {
String line;
boolean start = false;
// Read the file line by line
while ((line = br.readLine()) != null) {
if (start) {
// Here the start pattern has been found already
if (line.equals("{/AAAA}")) {
// The end pattern has been reached so we stop reading the file
break;
}
// The line is not the end pattern so we treat it
doSomething(line);
} else {
// Here we did not find the start pattern yet
// so we check if the line is the start pattern
start = line.equals("{AAAA}");
}
}
}
通过这种方式,您只读取文件直到到达结束模式,这比读取整个文件更有效率。
使用 Java 9(仍处于测试阶段),您可以这样写:
try (Stream<String> lines = Files.lines(path, UTF_8)) {
result = lines.dropWhile(line -> !line.equals("{AAAA}")
.takeWhile(line -> !line.equals("{/AAAA}")
.collect(toList());
}
对于 Java 8 或更早版本,标准的 while 循环似乎更合适。
我需要使用 java 来读取一个文本文件 8. 我可以读取整个文件。但我的问题是如何只读取文件的一部分。
示例:
我需要读取 {AAAA} {/AAAA}
之间的数据。我如何使用 java 8 及更旧版本执行此操作?
{AAAA}
This is the detailed description. This needs to be printed in the book
{/AAAA}
{BBBB}
Sample Code 1
Sample Code 2
Sample Code 3
{/BBBB}
试试这个:
try
{
BufferedReader br = new BufferedReader(new FileReader(new File(myFile)));
while(!((content=br.readLine()).equals("{/AAAA}")))
{
System.out.println(content);
}
}
catch(Exception e)
{
}
您可以使用 Files.lines(Path)
or Files.lines(Path, Charset)
来流式传输所有行。
读取机制 - 例如读取从“{AAAA}”到“{/AAAA}”的所有行必须由您实现。
你能做的最好的事情就是逐行阅读你的文件,直到你通过这样做达到你的模式:
try (BufferedReader br = new BufferedReader(
new InputStreamReader(new File(file), charset))
) {
String line;
boolean start = false;
// Read the file line by line
while ((line = br.readLine()) != null) {
if (start) {
// Here the start pattern has been found already
if (line.equals("{/AAAA}")) {
// The end pattern has been reached so we stop reading the file
break;
}
// The line is not the end pattern so we treat it
doSomething(line);
} else {
// Here we did not find the start pattern yet
// so we check if the line is the start pattern
start = line.equals("{AAAA}");
}
}
}
通过这种方式,您只读取文件直到到达结束模式,这比读取整个文件更有效率。
使用 Java 9(仍处于测试阶段),您可以这样写:
try (Stream<String> lines = Files.lines(path, UTF_8)) {
result = lines.dropWhile(line -> !line.equals("{AAAA}")
.takeWhile(line -> !line.equals("{/AAAA}")
.collect(toList());
}
对于 Java 8 或更早版本,标准的 while 循环似乎更合适。