• ベストアンサー

csvファイルを2次元配列に格納

Javaの勉強をしています。 csvファイルを読み込んで2次元配列に格納する方法を教えて下さい。 1次元の配列なら下記のようにして出来たのですが、2次元の配列に格納する方法が分かりません。 ------------------------------ try { File csv = new File("xxx.csv"); BufferedReader brf = new BufferedReader(new FileReader(csv)); while(brf.ready()) { String line = brf.readLine(); String[] data = line.split(","); for(int j=0; j<data.length; j++) { System.out.print(data[j] + "\t"); } System.out.println(); } brf.close(); } catch(FileNotFoundException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } --------------------------- 一度はできないのかと思い、上記の1次元配列のdata[j]を2次元配列のarray[i][j]に代入してみたのですが出来ませんでした。 回答宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

#1です。 > ファイル全体の行数はファイルを読み終わってからでないとわからないのですが、その場合どうすればよいのでしょう?? #2の方が書いておられるように、ArrayListなど適当なコレクションクラスにファイルを読み込み、行数が分かってから配列をnewすればいいでしょう。 import java.util.ArrayList; ArrayList<String[]> al = new ArrayList<String[]>(); while (...) { String line = brf.readLine(); al.add(line.split(",")); /* ArrayListへ読み込み */ } String[][] array = new String[al.size()][]; for (i = 0; i < al.size(); i++) { array[i] = al.get(i); /* ArrayListから配列へ */ } 勉強頑張ってください。

Rito24
質問者

お礼

salsberry様、丁寧な解答有難うございます。 無事、プログラムが出来ました。 どうも有難うございました。

その他の回答 (2)

回答No.2

ArrayListにdataを入れるという方法はダメでしょうか? List形式ならばどんどんaddするだけですので。 今のやりかただと1度ファイルをまないとダメですね。

Rito24
質問者

お礼

ProKaseifu様、ご回答有難うございます。 ArrayListを使うのですね。とても参考になりました。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

全体の行数が分からないと、2次元配列array[][]の初期化ができません。 全体の行数を n と仮定するとこんな感じでしょうか。 String[][] array = new String[n][]; /* String[]をn行分確保 */ i = 0; while (...) { String line = brf.readLine(); array[i] = line.split(","); /* i行目をsplit()した結果を代入 */ i++; } for (i = 0; i < n; i++) { for (j = 0; j < array[i].length; j++) { System.out.println("["+i+"]["+j+"] = " + array[i][j]); /* array[i][j]の読み出し */ } } ファイルを読み終わってからでないと全体の行数が分からない場合には、さらに一工夫必要です。

Rito24
質問者

お礼

salsberry様、ご回答どうも有難うございます。 とても参考になりました。 ファイル全体の行数はファイルを読み終わってからでないとわからないのですが、その場合どうすればよいのでしょう?? 適当な行数で2次元配列を初期化してしまうと読み出しで不具合が出てしまいますし・・・ 宜しくお願い致します。

関連するQ&A