- ベストアンサー
CSVデータの読み込みについて
大変お世話になっております。 CSVデータを読み込みたいのですが、 以下のようになってしまいます。 ----test.csv----- 1,a2,a3 2,a2,a3 3,a2,a3 4,a2,a3 5,a2,a3 6,a2,a3 7,a2,a3 8,a2,a3 9,a2,a3 10,a2,a3 ----------------- //FileReaderでもFileでも結果は同じ // FileReader t_in = new FileReader("test.csv"); File t_in = new File("test.csv"); BufferedReader in = new BufferedReader(new FileReader(t_in)); while (in.ready()) { String line = in.readLine(); System.out.println("lineは " + (line = in.readLine()) + " です。"); } ---------表示結果--------- lineは 2,a2,a3 です。 lineは 4,a2,a3 です。 lineは 6,a2,a3 です。 lineは 8,a2,a3 です。 lineは 10,a2,a3 です。 ------------------------- 1,3,5,7,9はなぜ読み込んでくれないのでしょうか? ご存知の方、いらっしゃったら教えてください。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
String line = in.readLine(); System.out.println("lineは " + (line = in.readLine()) + " です。"); ↑ここが原因。 String line = in.readLine(); で1行目を読み込んだ後、それを出力せずにそのまま System.out.println("lineは " + (line = in.readLine()) + " です。"); で2行目の読み込みと出力を行ってしまっています。 3行目や5行目が抜けるのも同じ原因です。 また、in.ready() はファイルを全部読み込んだかどうかを判断するメソッドではないので、上のコードだとファイルを全部読み込む前にループを抜けてしまう可能性があります。ファイルを全て読み込んだかどうか判断するには、readLine() の戻り値が null であるか判断するのが正解です。 以下は、ファイルの内容を行単位で読み込んで出力する場合のオーソドックスな書き方です。 String line; while ((line = in.readLine()) != null) { System.out.println("line は " + line + " です。"); } 最後に、 //FileReaderでもFileでも結果は同じ というのは正しくは「FileでもStringでも同じ」です。つまり、 BufferedReader in = new BufferedReader(new FileReader("test.csv")); でも BufferedReader in = new BufferedReader(new FileReader(new File("test.csv"))); でも同じということです。間違っても FileReader t_in = new FileReader("test.csv"); BufferedReader in = new BufferedReader(new FileReader(t_in)); などとしないように。
その他の回答 (1)
- rotesKomet
- ベストアンサー率31% (83/265)
JAVAは詳しくないですが、 String line = in.readLine(); と System.out.println("lineは " + (line = in.readLine()) + " です。"); の in.readLine()で2回読み込んでるので、2回目の結果のみ表示されるのではないでしょうか? System.out.println("lineは " + line + " です。"); ではどうでしょう?
お礼
恥ずかしいミスをしてしまいました・・・。 どうもありがとうございます!
お礼
単純なミスに気がつきませんでした・・・。 >間違っても >FileReader t_in = new FileReader("test.csv"); >BufferedReader in = new BufferedReader(new >FileReader(t_in)); >などとしないように。 この部分を気をつけたいと思います。 ほんとうにどうもありがとうございました!