2011-07-05 5 views
1

ディレクトリをトラバースして "rels.txt"というファイルのインスタンスをすべて検索しようとしていますが、各インスタンスごとにファイルに移動して個々のファイルをロードします値をファイルからJavaのHashMapにコピーします。以下は、私が働いている「rels.txt」のいずれかのファイルの内容は以下のとおりです。ファイルをJavaのHashMapにスキャンする

テキストファイル:

rId8,image2 
rId13,image5 
rId7,image1 
rId12,image4 
rId17,image8 
rId15,image7 
rId9,image3 
rId14,image6 

ここで私が持っているJavaコードを行き来することになっているというこれまでにありその値をHashMapに保存し、HashMapを印刷してから削除します(新しい値のセットをディレクトリ内の別の "rels.txt"ファイルから保存することができます)。

Javaコード:

private void traverse(File directory) throws FileNotFoundException 
    { 
     //Get all files in directory 
     File[] files = directory.listFiles(); 
     for (File file : files) 
     { 
      if (file.getName().equals("rels.txt")) 
      { 
       Scanner scan = new Scanner(file).useDelimiter(","); 
       while (scan.hasNextLine()) 
       { 
        String id; 
        String image; 

        id = scan.next(); 
        image = scan.next(); 
        imageMap.put(id, image); 
       } 
       System.out.println(imageMap); 
       imageMap.clear(); 
      } 

      else if (file.isDirectory()) 
      { 
       //It's a directory so (recursively) traverse it 
       traverse(file); 
      } 
     } 
    } 

これは私が取得していると私は私が間違っているつもりどこかなりわからないエラー/出力されます。

エラーこのコードの/出力

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Unknown Source) 
    at java.util.Scanner.next(Unknown Source) 
    at XMLTagParser.traverse(XMLTagParser.java:153) 
    at XMLTagParser.traverse(XMLTagParser.java:198) 
    at XMLTagParser.traverse(XMLTagParser.java:198) 
    at XMLTagParser.<init>(XMLTagParser.java:27) 
    at IPDriver.main(IPDriver.java:21) 
{image26 
rId19=image9 
rId31, image15 
rId33=image23 
rId38, image29 
rId21=image11 
rId34, image12 
rId27=image17 
rId30, image28 
rId16=image6 
rId20, image14 
rId32=image22 
rId37, image2 
rId17=image7 
rId25, rId13=image3 
rId18, image20 
rId35=image25 
, image8 
rId26=image16 
rId39, image24 
rId7=image1 
rId12, image21 
rId14=image4 
rId22, image10 
rId29=image19 
rId24, image13 
rId28=image18 
rId36, image27 
rId15=image5 
rId23} 

は、私は基本的にちょうど私のプロジェクトの別の部分のためのHashMapを呼び出すことができるようにしたいと私はRIDの値のいずれかを参照するとき、私は得ることができます対応するイメージ値誰かが私が間違っているかもしれないか、あるいはもっと効率的な解決法について何か考えを持っていますか?前もって感謝します。

FriedrikにワーキングJavaコードのおかげ:あなたのファイルを想定し

private void traverse(File directory) throws FileNotFoundException 
     { 
      //Get all files in directory 
      File[] files = directory.listFiles(); 
      for (File file : files) 
      { 
       if (file.getName().equals("rels.txt")) 
       { 
        Scanner scan = new Scanner(file); 
        while (scan.hasNextLine()) 
        { 
         String[] line = scan.nextLine().split(","); 
         imageMap.put(line[0], line[1]); 

        } 
        System.out.println(imageMap); 
         imageMap.clear(); 
       } 

       else if (file.isDirectory()) 
       { 
        //It's a directory so (recursively) traverse it 
        traverse(file); 
       } 
      } 
     } 

答えて

3

を変更してみてください。 next()は "image2 \ nrId13"を一緒に読み込みます。それは、区切り文字ではなく、文字としてのリターンを考慮します。スキャナの

これを行うための別の方法は、「useDelimiterを(」、「)」を削除し、このループを使用します。

  Scanner scan = new Scanner(file); 
      while (scan.hasNextLine()) 
      { 
       String[] line = scan.nextLine().split(","); 
       imageMap.put(line[0], line[1]); 
      } 
      System.out.println(imageMap) 

をちょうどあなたのファイルがリターンで終わっていないことを確認してください。

+0

私はあなたが言っていることを見ていますが、デリミタに追加の引数を追加するにはどうすればよいですか? (最初にそれを使って作業して、ごめんなさい) –

+0

多分正規表現 "[、] [\ n]"。完全にはわかりません。あなたが望むなら、私はあなたにこれを行う別の方法を与えることができます。 – Friedrik

+0

ええ、確かに、任意の提案にオープン –

1

はあなたが言ったまさにある区切り文字があるので、あなたはスキャン "" hasNextLinehasNext

関連する問題