- ベストアンサー
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]に代入してみたのですが出来ませんでした。 回答宜しくお願い致します。
- みんなの回答 (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から配列へ */ } 勉強頑張ってください。
その他の回答 (2)
- ProKaseifu
- ベストアンサー率51% (98/192)
ArrayListにdataを入れるという方法はダメでしょうか? List形式ならばどんどんaddするだけですので。 今のやりかただと1度ファイルをまないとダメですね。
お礼
ProKaseifu様、ご回答有難うございます。 ArrayListを使うのですね。とても参考になりました。
- salsberry
- ベストアンサー率69% (495/711)
全体の行数が分からないと、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]の読み出し */ } } ファイルを読み終わってからでないと全体の行数が分からない場合には、さらに一工夫必要です。
お礼
salsberry様、ご回答どうも有難うございます。 とても参考になりました。 ファイル全体の行数はファイルを読み終わってからでないとわからないのですが、その場合どうすればよいのでしょう?? 適当な行数で2次元配列を初期化してしまうと読み出しで不具合が出てしまいますし・・・ 宜しくお願い致します。
お礼
salsberry様、丁寧な解答有難うございます。 無事、プログラムが出来ました。 どうも有難うございました。