2016-09-09 25 views
1

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} 
+0

あなたが探しているものが見つかるまで、ファイルを1行ずつ読みます。 – assylias

答えて

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

あなたが最後のパターンこれに到達するまで、あなただけのファイルを読んで、この方法ファイル全体を読むよりも効率的です。ループは、より適切と思わながら、Javaの8またはそれ以前の、標準で

try (Stream<String> lines = Files.lines(path, UTF_8)) { 
    result = lines.dropWhile(line -> !line.equals("{AAAA}") 
       .takeWhile(line -> !line.equals("{/AAAA}") 
       .collect(toList()); 
} 

:(まだベータ版)のJava 9で

+0

Thanks Nicolas。あなたの答えは私の問題を解決した – NPrasad

0

これを試してみてください:

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

あなたはすべての行をストリーミング取得するFiles.lines(Path)またはFiles.lines(Path, Charset)を使用することができます。読み取り機構(例えば、読み取り機構)。 "{AAAA}"から "{/ AAAA}"までのすべての行をあなたが実装しなければなりません。

+0

条件に基づいて開始/終了するのは、Java 8ストリームでは簡単ではありません(dropWhile/takeWhileを使用してJava 9でうまくいくでしょう)。 – assylias

1

、あなたのような何かを書くことができます。

関連する問題