使用 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 循环似乎更合适。