- PR -

eclipse上にてファイル入出力時のエラー

1
投稿者投稿内容
jokers
ベテラン
会議室デビュー日: 2002/08/04
投稿数: 73
投稿日時: 2003-09-24 10:34
 たびたび申し訳ございません。
 eclipse上にてjava.ioパッケージを利用してファイルに書いてある数字を入力及び更新を行い、
 
File file = new File(file-name);
FileInputSteam fin=new FileInputStream(file);
DataInputStream is =new DataInputStream(fin);
 のようにIo通常フィルターストリームパターンを記述したのですが、
以下のエラーにて、
 fileNotFoudExceptionの表示があり、ファイルを認識できないようなのです。
 入出力されるファイルの配置をクラスファイルと同じ場所にしたり、eclipse上ではWEB−INF/src/ ですが、プロジェクトフォルダーのすぐ下にしたがファイルを認識できません。
eclipse以外で入出力を行ったときはクラスファイルと同じフォルダーに配置すれば何の問題もなく動作したものですが、eclipse上の特殊事情があるのかどうかということを確認したいので
教えていただければ大変有難いのですが・・・


[ メッセージ編集済み 編集者: jokers 編集日時 2003-09-24 10:36 ]

[ メッセージ編集済み 編集者: jokers 編集日時 2003-09-24 10:37 ]
PAL
ベテラン
会議室デビュー日: 2002/11/14
投稿数: 63
投稿日時: 2003-09-24 10:50
引用:

jokersさんの書き込み (2003-09-24 10:34) より:
eclipse以外で入出力を行ったときはクラスファイルと同じフォルダーに配置すれば何の問題もなく動作したものですが、eclipse上の特殊事情があるのかどうかということを確認したいので
教えていただければ大変有難いのですが・・・



eclipse特殊事情はありません。
まず、どこのファイルにアクセスしようとしているのか、ファイルパスをデバッグなりログなりでチェックされた方が良いと思います。
ウラタン
常連さん
会議室デビュー日: 2003/07/25
投稿数: 29
投稿日時: 2003-09-24 16:08
お疲れさまです。

えーと、eclipseでどういう構成を行ったのかによって事情が違いますが・・・
普通のclassなんですかね? main()のある。
それとも、Servletやjspからファイル操作のライブラリ叩いてるとかです?

ServletやjspなどのWebアプリだと、動作させる時は、Webrootなどと呼ばれる
ルートディレクトリを基準に動きます。
このディレクトリは環境によって変わりますので、注意しないと変な場所になり
ますよ。

うんちくはさておき、とりあえず、try-catchでひっかければ判るのでは?
try
{
File file = new File(file-name);
FileInputSteam fin=new FileInputStream(file);
DataInputStream is =new DataInputStream(fin);
}
catch(Exception e)
{
e.printstacktrace();
}
とかやれば、メッセージ出るんじゃないですかね?

#以下少し違う話
この会議室でも少し話を出させて戴いているのですが、このように絶対パスで場所を意識
しようとしている外部ファイルと、相対パスでアプリに飲み込みで良いファイルの区別は
みなさんどんな感覚で行っているのでしょうか?

実際に質問がちらほら見られることからも、外部設定ファイルの類をクラスパスやwebroot
などに置くのは、環境周りをきちんと把握しないと扱いづらいのかも知れませんね。
とんび
常連さん
会議室デビュー日: 2003/07/11
投稿数: 32
投稿日時: 2003-09-24 16:31
引用:

jokersさんの書き込み (2003-09-24 10:34) より:
eclipse以外で入出力を行ったときはクラスファイルと同じフォルダーに配置すれば何の問題もなく動作したものですが、eclipse上の特殊事情があるのかどうかということを確認したいので
教えていただければ大変有難いのですが・・・



とりあえず、カレントディレクトリを以下の方法で調べて、そこにおけばいいと思います。(おそらくEclipseを実行したディレクトリになってると思います。)

File fileCurrent=new File(".");

System.out.println(""+fileCurrent.getAbsolutePath());

ただし、設定ファイルなどを読み込むのはClassLoaderを使って読み込むのが定石だと思うのですが。

かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-09-24 16:59
引用:

この会議室でも少し話を出させて戴いているのですが、このように絶対パスで場所を意識
しようとしている外部ファイルと、相対パスでアプリに飲み込みで良いファイルの区別は
みなさんどんな感覚で行っているのでしょうか?

実際に質問がちらほら見られることからも、外部設定ファイルの類をクラスパスやwebroot
などに置くのは、環境周りをきちんと把握しないと扱いづらいのかも知れませんね。



webアプリに関しては分からないですが、クライアントサイドアプリであれば、

  • I18N対策やアプリ内で使用する画像などの内部リソースはjarファイル内へ
  • 設定ファイルなどの外部リソースは、アプリケーションが存在するディレクトリ(single-user)か、homeディレクトリ(multi-user)を基準とした位置へ

配備するようにしています。
従って、内部リソースはクラスローダーを介してロード、外部リソースはjava.ioパッケージのオブジェクトを使用してロードというように使い分けています。

アプリケーションで作成したファイルは、どこに置かれるか分からないので絶対パスでアクセスすることになりますね(ダイアログから選択するので、絶対 / 相対パスかどうかは気にしていないけど)。
1

スキルアップ/キャリアアップ(JOB@IT)