2016-05-12 9 views
0

次のテキスト・ファイルから行を読み込むbufferedReaderを持っていると、たとえば、最初のITEMのタグITEM_TYPEを読み取ってから、タグCODEを返して読み取ります他のすべてのタグ(最初のITEM)に?Javaバッファード・リーダーが戻ってジャンプ線に戻る

ITEM_LIST 
{ 
    ITEM 
{ 
    CODE ADLS443 
    ITEM_TYPE tv 
    MODEL IDL32KJX4300 
    MODEL_YEAR 2016 
    MANUFACTURER Samsung 
    PRICE 350 
    PANEL_TYPE LCD 
    DIMENSIONS 32 
    RESOLUTION "Full HD" 
    INTERFACES "HDMI USB SCART" 
    PIECES 43 
} 
ITEM 
{ 
    CODE KD444211 
    ITEM_TYPE tv 
    MODEL KDL49DDR4600 
    MODEL_YEAR 2014 
    MANUFACTURER Sony 
    PRICE 600 
    PANEL_TYPE LED 
    DIMENSIONS 49 
    RESOLUTION "Ultra HD" 
    INTERFACES "HDMI USB SCART Ethernet WiFi" 
    PIECES 8 
} 
+0

リーダーはファイルを上から下に読み取ります。あなたは何をしようとしているのですか?私は本当の問題は、あなたがそれらを解析するときに結果を処理する方法であると考えています。 – cyroxis

+0

タグITEM_TYPEに応じてオブジェクトを作成しようとしています(ITEM_TYPEがテレビの場合、ITEM_TAGの残りのフィールドを持つテレビオブジェクトを作成します)。 –

+0

ところで、あなたはファイル形式を制御できますか?あなたのフォーマットをJSONのようなものに切り替えることができれば、解析はより簡単になります(GsonのようなライブラリやJacksonがそれを行います)。 – cyroxis

答えて

1

構文解析に中間ステップを追加できます。

  1. (セクションの)すべてのキー値のペアをマップに解析します。
  2. マップ値を使用して目的のオブジェクトを作成します。

残りのコードはここでは分かりませんが、どのようにデータを解析できるかの擬似コードがあります。

Map<String, String> values = new HashMap<>(); 
// For each key value pair in section 
    String key = // parse key name 
    String value = // parse key value 
    values.put(key, value); 

String type = values.get("ITEM_TYPE"); 
if (type.equals("tv")) 
    TvObject tv = new TvObject(values); 
} 

編集:

あなたが特定のキーの値についての解析が、あなたのファイルのフォーマットのためにするべきではありません。ここで

ITEM 
{ 
    <key> <value> 
    <key> <value> 
    <key> <value> 
} 

あなたは時に拡張することができINIファイルを解析する方法のexampleです。

+0

[ファイル全体をリストにロードする](http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllLines-java.nio)を提案しようとしていました。 .file.Path-java.nio.charset.Charset-)これはファイルをパースするのが簡単になり、ファイルの合計サイズについてあまり心配することなく、より良いアプローチです。 – erickson

+0

ありがとうございますが、タグの順序が特定でない場合は、ファイルからキーと値を読み取り、マップに挿入するにはどうすればよいですか? –

+0

何を試しましたか?あなたは解析のチュートリアルを準備しましたか?私は助けてうれしいですが、あなたのためにあなたのプロジェクトを書くつもりはありません。 – cyroxis

関連する問題