我需要使用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}
答案 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}”必须由您实施。