使用java 8从文件中读取数据块

时间:2016-09-09 10:34:04

标签: java file-read

我需要使用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}

4 个答案:

答案 0 :(得分:2)

你能做的最好的事情就是逐行阅读你的文件,直到你通过这样的方式达到你的模式:

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}");
        }
    }
}

这样您只需阅读文件,直到达到结束模式,这比阅读整个文件更有效。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

试试这个:

try
{
  BufferedReader br = new BufferedReader(new FileReader(new File(myFile)));
  while(!((content=br.readLine()).equals("{/AAAA}")))
  {
     System.out.println(content);
  }
}
catch(Exception e)
{
}

答案 3 :(得分:0)

您可以使用Files.lines(Path)Files.lines(Path, Charset)来播放所有线路。

阅读机制 - 例如阅读“{AAAA}”中的所有行,直到“{/ AAAA}”必须由您实施。