2017-08-11 15 views
-1

私はこの形式のtxtファイルをいくつか持っており、それらを読み込んで情報を収集する必要があります。Java BufferedReaderを使ってこの形式のtxtファイルを読む方法

FILE1.TXT: enter image description here FILE2.TXT:私だけに、それは文字列に「ファイルを」保存することができます「ファイル」セクション、およびそのすべてのサブコンテンツを読みたい enter image description here

別の文字列。

(例えば、FILE1.TXT :)

String file = "file"; 

に私はすべてのサブコンテンツを読んでようになり、別の文字列に保存するforループを書きたい:

for (int i = 0; i < numberOfSubcontentLines; i++){ 
    sub = sub + br.readLine() + ", "; 
} 

私にとっては難しいのは、異なるtxtファイルにはサブコンテンツの行が異なっていることです。これらの行をどのように読み込むのかはわかりませんので、どちらの場合でもこの方法を使用できます。

現在のコードは、私が試した:それは私が望んで取得していない

public void readFile(String fileLocation) throws IOException { 
    fileMap = new HashMap<>(); 
    FileReader reader = new FileReader(fileLocation); 
    BufferedReader br = new BufferedReader(reader); 
    String line; 
    String file; 
    // Assign a temp value to save the sub-content 
    String temp = ""; 
    while ((line=br.readLine()) != null) { 
     if(line.contains("file")){ 
      file = "file"; 
      // Skip the next line 
      br.readLine(); 
      // save all the sub-contents 
      do { 
       temp = temp + br.readLine() + ", "; 
      } while(br.readLine().contains("****")); 
     } 
    } 
    fileMap.put(file, temp); 
    System.out.println(fileMap); 
} 

。任意の提案やアイデア? Tkxは進歩した。

+0

おそらく、あなたはメソッドを作成しています。メソッドへのインプットは何ですか? (私はファイル名を推測していますが、他の部分はファイルの "セクション"名かもしれません。あなたの例では、これは "ファイル"かもしれませんが、読みたい場合は "apple" 「リンゴ」セクション)。望ましい出力は何でしょうか?ファイル形式について何が仮定できますか? –

+0

まず、このコードを自分で作成し、コードを試して、動作中のプログラムを試してみてください。それが失敗した場合は、より具体的な質問をして、このコードの試行(コンパクトで実行可能な完全なプログラム)を表示することができます。この試みがなければ、あなたの質問はコードの要求になりますが、これは許されません。あなたの知識とスキルを考えれば、あなたはこれを解決するか、まともな試み(と紙面上に書かれたコードフローの論理を書き留めている)を使って解決策にかなり近づけることができます。 –

+0

あなたはあまりにも多くの異なる場所の行を読み込んでおり、正しく処理することはできません。代わりに、ステートマシンを作成する必要があります。これは、ラインを読み込むための場所の束ではなく、1つのwhileループです(ステートマシンにラインを送ります。ステートマシンは、ステートマシンに応じてさまざまな方法でラインを処理します)。 –

答えて

1

状態を保持するオブジェクト(状態を保持するブール値または列挙型)を作成し、使用する必要があります。ステートマシンは、各行に与えられた状態に応じて各行を処理します。コードフローの概略は次のようになります。

enter image description here

他の状態は、入力やファイルの末尾を含めることができます。
重要な点は、1つの点だけで、whileループ内で行を読み取ってから、ループがテキストを処理しているコードの他の部分に渡すことです。

+0

あなたの説明をありがとう、私はこの方法で作業し、私がそれを解決できるかどうかを試してみます。 –

関連する問題