2016-11-06 2 views
0

私はcsvファイルからデータを取得し、配列に格納するこのメソッドで作業しています。私がコンパイルしたコードですが、各配列の値は "null"です。なぜこれが起こっているのか分かりません。CSVファイル分割値すべてnull

CSVファイルは次のように見えるが91行継続:

日曜日/ 2016分の1 9 ,,,,, 16:00,20:00
9月2日(月曜日)/ 2016,8 :00,12:00 ,,,,
9月3日(火曜日)/ 2016,8:00,12:00,12:00,16:00 ,,
水曜日/ 2016分の4 9 ,,,, 、16:9// 2016年6 ,,, 12 00 ,,,,
金曜日:00,16:9/10/2016,8 00
木曜日:00,12 00,20 00 ,,
土曜日、9/7/2016 ,,,,, 16:00,20:00

public static void getData() throws FileNotFoundException { 
    File timeSheets = new File("timeSheets.csv"); 
    Scanner ts = new Scanner(timeSheets); 
    int n = 0, c = 0; 

    String temp; 

    while (ts.hasNext()) { 
     temp = ts.nextLine(); 
     c++; 
    } 

    String[] field = new String[8]; 
    String[] day = new String[c]; 
    String[] date = new String[c]; 
    Integer[] morn = new Integer[c]; 
    Integer[] after = new Integer[c]; 
    Integer[] night = new Integer[c]; 

    while (ts.hasNext()) { 
     temp = ts.nextLine(); 
     field = temp.split(","); 
     day[n] = field[0]; 
     date[n] = field[1]; 

     if (field[4].equals("")) { 
      morn[n] = 0; 
     } else { 
      morn[n] = (int) (Double.parseDouble(field[4].replace(":", ".")) 
        - Double.parseDouble(field[3].replace(":", "."))); 
     } 

     if (field[6].equals("")) { 
      after[n] = 0; 
     } else { 
      after[n] = (int) (Double.parseDouble(field[6].replace(":", ".")) 
        - Double.parseDouble(field[5].replace(":", "."))); 
     } 

     if (field[8].equals("")) { 
      night[n] = 0; 
     } else { 
      night[n] = (int) (Double.parseDouble(field[8].replace(":", ".")) 
        - Double.parseDouble(field[7].replace(":", "."))); 

     } 
     n++; 
    } 
    System.out.print(day.length); 
    System.out.println(); 
    for (int i = 0; i < day.length; i++) { 
     System.out.println(day[i]); 
    } 

    ts.close(); 
} 
+0

ループしながら、あなたは最初の内のすべての行を尽くす - ので、何も第二のループの開始時に残っていない...あなたは 'TS =新しいスキャナ(タイムシート)を追加することができますが、 '2番目のループの前に。しかし、その後、配列のサイズを取得するために2回だけのファイルを読むことは非常に非効率的である... – assylias

答えて

-1

あなたはファイルを読んでいません。 new File("timeSheets.csv")は、ファイルへの参照のみを作成します。あなたはそのファイルの内容を読む必要があります。

これは簡単にやって作るのライブラリがたくさんあります。この機能を提供するrt.jarの基本クラスはFileReaderです。

+0

そうでもない: 'スキャナTS =新しいスキャナ(タイムシート);' – assylias

+0

はいああ...愚かな私。 –

1

あなたのコードを実行しようとしています。私は2回目は決してループしていないことが分かります。 ts.hasNext()メソッドは常にfalseを返します。最初のストリームリソースが読み込まれており、ストリームリソースが閉じられていたためです。

ソリューション:あなたは再びオブジェクトスキャナを初期化する必要があります。

注:私はスキャナオブジェクトを印刷したものを確認することができます。あなたはその結果などを取得します:

java.util.Scanner[delimiters=\p{javaWhitespace}+][position=238][match valid=false][need input=false][source closed=true][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\Q?\E][infinity string=\Q?\E]7 
関連する問題