2011-10-18 21 views
0

申し訳ありません。そこで、Javaアプリケーションを作成して、csvファイルをインポートし、結果をループして配列にロードします。例外を通さないため、ファイルを正しくインポートしています。私の問題は、FileInputStreamのレコード数を数えようとすると、無限ループに閉じ込められてしまうことです。ここで何が問題になるか。 HERESにコードは:FileInputStreamをループするときの無限ループ

これは()に行く呼び出すMainメソッドで私のクラスである:これはクラスPopularNames(ポップ)である

public void go() { 
    pop = new PopularNames(); 
    popGui = new PopularNamesGui(); 
    String file = popGui.userInput("Enter the correct name of a file:"); 
    pop.setInputStream(file); 
    pop.getNumberOfNames(); 
} 

、および下記の方法で私がためのInputStreamのVARを設定しています新しいFileINputStreamファイル名はユーザーが指定します。

public void setInputStream(String aInputStream) { 
    try { 
     inputStream = new Scanner(new FileInputStream(aInputStream)); 
    } catch (FileNotFoundException e) { 
     System.out.println("The file was not found."); 
     System.exit(0); 
    } 
} 

これは問題の方法です。私は単にのFileInputStreamをループして、レコードの数をカウントしています。ここで

public void getNumberOfNames() { 
    while (this.inputStream.hasNext()) { 
     fileDataRows++; 
    } 
} 
+2

を実際に 'Scanner'何かの名前' inputStream'を使うのは悪い考えです。それは、あなたがしばらくの間宣言を見ないと、実際の 'InputStream'で有効でないメソッド呼び出しを見ていると非常に混乱します。同様に 'aInputStream'は実際には' filename'かそれに類するもののように聞こえます。 –

+0

Jonが言ったこと(+1)はありますが、わかりやすい命名基準に従わないと「**本当に**悪い考えです」と言います。 – Bohemian

答えて

6
public void getNumberOfNames() { 
    while (this.inputStream.hasNext()) { 
    inputStream.nextLine(); // Need to read it so that we can go to next line if any 
    fileDataRows++;  
    } 
} 
+0

同意します。 next()およびhasNext()についてはhttp://download.oracle.com/javase/1,5,0/docs/api/java/util/Iterator.html#next()を参照してください。 – rit

+0

@Walter:yes.youすでにファイル全体を読み込んでいます。 –

+0

これはうまくいきました...しかし、(別の方法で)ファイルを配列に読み込むと、次のようなエラーが出ました。 –