2016-10-06 14 views
0

CSVファイルを私のオフィスのすべてのプリンタのインストーラを作成するために書いたバッチファイルとマージします。 xeroxTemplate.txtファイルは、書式設定の問題を引き起こしていた場合のためにtxtとして名前を変更したバッチファイルです。スキャナ入力の問題

実行すると、最初の "for"ループで次のエラーがスローされます。私は、ファイル内容

java.util.NoSuchElementException: No line found

public class PrinterScriptCreator { 

    public static void main(String[] args) { 
     Scanner csvScanner = new Scanner("printers.csv"); 
     csvScanner.useDelimiter(","); 
     Scanner txtScanner = new Scanner("xeroxTemplate.txt"); 

     try{ 
      while(csvScanner.hasNext()){ 
       //create file with name from first csv cell 
       FileWriter fw = new FileWriter(csvScanner.next()); 
       PrintWriter pw = new PrintWriter(fw); 
       //copy first 7 lines from xeroxTemplate.txt 
       for(int i=0; i<7; i++){ 
        pw.println(txtScanner.nextLine()); 
       } 
       //copy the next three cells from CSV into new file 
       for(int i=0; i<3; i++){ 
        pw.println(csvScanner.next()); 
       } 
       //copy remaining lines from TXT to the new file 
       while(txtScanner.hasNextLine()){ 
        pw.println(txtScanner.nextLine()); 
       } 
      } 
     } catch (IOException ex) { 
      System.out.printf("ERROR: %s\n", ex); 
     } 
    } 
} 
+0

、これを試してみてください。それを見つけてここに貼り付けたコードに(コメントを追加して)ハイライトします。 –

答えて

0

あなたはスキャナのオブジェクトをインスタンス化する方法は、あなたがコンストラクタに渡す文字列を解析する必要があるコンテンツと見なされていないことを確認しました。

Scanner csvScanner = new Scanner("printers.csv"); 
Scanner txtScanner = new Scanner("xeroxTemplate.txt"); 

ここでは、区切り文字 "、"を使用して文字列 "printers.csv"を解析しようとしています。文字列に "、"がないので、下のコードで2番目以降の値を読み込もうとすると失敗します。

for(int i=0; i<3; i++){ 
    w.println(csvScanner.next()); 
} 

スキャナを使用してファイルを読み取る場合は、ファイルオブジェクトをスキャナのコンストラクタに渡すこともできます。

は、スタックトレースは、エラーがで発生した行に何を教えてくれます

File file = new File("printers.csv"); 
Scanner csvScanner = new Scanner(file); 
+0

あなたが誤ってやっていることをOPに話したら助けになるでしょう。この場合、ファイル名はファイルとして扱われるのではなく、入力値として使用されており、これを2回実行したと言えるかもしれません。 –

+0

@EngineerDollery done! –

+0

それはそれを解決し、私はあなたの説明を理解した。ありがとう! – Dumpfood