- 締切済み
ファイルの指定について
お世話になります。 import java.io.*; class Sample1_1 { public static void main(String[] args) { File fp = new File("foo.txt"); if (fp.exists()) { System.out.println("foo.txtは存在します。"); } else { System.out.println("foo.txtは存在しません。"); } } } プログラミングを学習中の者です。 eclipseにてこのようなサンプルプログラムを入力して勉強しているのですが、わからないことだらけなので、教えてください。 上記のプログラムでは対象ファイルの名前しか指定されていませんが この場合、「foo.txt」はどこに存在していることになるのでしょうか? おそらくパスが省略されていても問題ないということなのでしょうが、 なぜそうなのか、ということについてがわからないため、ご教示いただきたく思います。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- bgbg
- ベストアンサー率53% (94/175)
聞くよりも自分で調べるが早し。 fp.getAbsolutePath() でファイルの絶対パスが調べられます。
通常、Javaアプリケーションを実行したときには、そのプログラムが置かれている場所から探します。ですから「普通は」プログラムのある場所においておけば認識します。が、EclipseのプロジェクトをEclipse内から実行した場合、これでは認識しない場合があるので注意が必要です。 おそらく、そのプロジェクトでは「bin」フォルダにプログラムを生成するようになっているのではないでしょうか。Eclipseのプロジェクトは少々癖があり、プログラムがある「bin」フォルダではなく、プロジェクトのフォルダを作業場所として認識するような形で実行されます。ですから、プログラムのある「bin」内にあっても、Eclipse内から実行するとファイルが見つからないのです。(そのプログラムを直接javaコマンドで実行すればちゃんと認識するはずです) 「実行」メニューから実行ダイアログを呼び出し、そこから実行構成を選択してください。そして、「引数」タブの作業ディレクトリーを「その他」にし、${project_loc}\bin と入力します。これで、通常と同じように「bin」ディレクトリ内のプログラムがある場所を作業場所として認識するようになります。
補足
アドバイスありがとうございます。 ただ、よくわからなかったのですが、「bin」フォルダとはどこにある ものなのでしょうか? eclipseの中にはそのようなフォルダは見当たらなかったのですが・・・
通常相対パスはプログラムの実行ディレクトリから見たパスなので 恐らくeclipse.exeが置いてある位置からの相対パスになると思います。 どこから実行するかによって変わってしまうため、通常は絶対パスで 記述することをオススメします。
お礼
ご回答ありがとうございます。 なるほど、基本的に絶対パスで書けば問題ないのですね。 サンプルとした本が、普通にファイル名だけで指定していたので それが普通なのかと思っていました。 これからは絶対パスを記述することにします。
お礼
ご回答ありがとうございます。 教えていただいたとおり、絶対パスを表示させてみるとわかりました。 実際にfoo.txtというファイルを作成していたわけではないので、絶対パスが取得できるわけがないと思っていました。 ちゃんとどこを見に行っているのかを、ファイルの存在の有無とは関係なしに表示してくれるのですね。 勉強になりました。 ありがとうございました。