- ベストアンサー
CSVファイルを列ごとに読み込む処理について
はじめまして。 よろしくお願いいたします。 プログラミングに興味をもち、JAVAに触れている者です。 現在eclipseでCSVファイルを列ごとに読み込んで表示する、というプログラムを作成しているのですが、コンパイルエラーを除去することができません。 エラー内容は 「処理されない例外の型 FileNotFoundException」 です。 これを見る限りでは読み込むファイルがないということらしいのですが、CSVファイルはちゃんと作成し、作成中のプログラムのファイルがあるディレクトリに置いてあります。 原因を探したいのですが、eclipseのこともjavaのこともよくわかっていないため、まるで見当がつきません。 どうかご教示をお願いいただけませんでしょうか? 以下が作成中のプログラムです。 package ioTest; import java.io.BufferedReader; import java.io.File; import java.io.InputStreamReader; import java.io.FileInputStream; public class IOsample { public static void main (String[] args){ BufferedReader br = null; File csv = new File("sampleCSV.csv"); br = new BufferedReader( new InputStreamReader( new FileInputStream(csv))); while (br.ready()){ System.out.println(br.readLine()); } br.close(); } } レベルの低い質問で申し訳ありませんが、なにとぞよろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ファイルが見つからないのなら、絶対パスを取得してファイルがどのパスを参照しているのか調べてみるといいでしょう。 File csv = new File("sampleCSV.csv"); System.out.println(csv.getAbsolutePath());
その他の回答 (2)
とりあえずコンパイルエラーをなくしたいのであれば、下のような感じでtry, catchで囲んでください。 なぜこうするのかとか、他の方法とかは「例外」について勉強を進めていくとわかるかと思います。 public static void main (String[] args){ BufferedReader br = null; try{ File csv = new File("sampleCSV.csv"); br = new BufferedReader( new InputStreamReader( new FileInputStream(csv))); while (br.ready()){ System.out.println(br.readLine()); } br.close(); } catch(IOException e){ System.err.println("エラーが発生しました:" + e); } }
お礼
アドバイスありがとうございます。 なぜ実用レベルではない遊び半分のプログラムですら例外処理をきちんとしなければならないのか、については「Javaの仕様です」というくらいの認識しかないのですが、これから少しづつ勉強して行こうと思います。
- t_nojiri
- ベストアンサー率28% (595/2071)
必ずtry&catchを入れないと上手く動かない気も・・・。 http://www.inf.ie.kanagawa-u.ac.jp/uchida/class/javas/file.html まあ、ファイルが見つからないならフルパスにしてみるとか、環境変数にカレントディレクトリが含まれてるのか確認するのも一つの手段かと思いますが。
お礼
お返事ありがとうございます。 仕事が終わってから少し調べてみたのですが、どうやら例外処理?をきちんと作ってやらないとコンパイルすらできないのですね。 実用を考えなければ例外処理などなくても良いものだとばかり思っていました。 勉強になりました。
お礼
ご教示ありがとうございます。 やってみたところ、目的のCSVファイルの絶対パスが表示されました。 やはり原因は他の方が言及されているとおり、例外処理をしていないことのようです。 余談ではありますが、知りたい情報をSystem.out.println();で表示させるという応用法に妙に感動してしまいました。 私にとってSystem.out.println()というと、ただ文字を表示するだけのもの、という程度の認識しかなかったものですから。 大変勉強になりました。