- PR -

サーブレットでファイルの読書き

1
投稿者投稿内容
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-06-08 17:57
javaサーブレットでファイルの読書きをしようと思っています。
しかし、ファイルのオープンで例外「Permission denied」が発生し困っています。
原因をご存知の方、アドバイスお願いいたします。

コード抜粋----------------------------------------------------
FileOutputStream outFile = null;
try
{
outFile = new FileOutputStream("Hoge.txt", true);
}
catch( IOException e )
{
pw.println("ファイルオープン失敗じゃ! " + e.getMessage() + "<BR>\n");
return;
}

その他----------------------------------------------------
1)サーバは、あるレンタルサーバを使用しています。
  tomcatは4.1.31、jdkは1.4.2
2)サーブレットとHoge.txtは、同じフォルダに保存しています。
3)Hoge.txtの属性は「777」にしてあります。(何でもありあり)
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2005-06-08 18:08
引用:

ぽちさんの書き込み (2005-06-08 17:57) より:
コード:
    outFile = new FileOutputStream("Hoge.txt", true);




この方法では、サーブレットと同じところには作られません。
おそらくは、$CATALINA_HOME/binに作られてるんじゃないでしょうか。
Hoge.txtでFileインスタンスを作って、絶対パスを確認してみては?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-06-08 19:38
サーブレットからファイルを参照する場合、
ServletContext#getRealPathを使用します。
WEB-INFからのパスを入力で与えると、実際のパスが返されます。
context.getRealPath("/WEB-INF/classes/hoge.txt");
みたいに使用します。

あとは、クラスパス上にファイルが存在するのであれば、
ClassLoaderでクラスパスルートを起点としたパスでURLが取得できます。
そのURLからFileを作ってもいいかもしれません。
hoge.txtが、パッケージaaa/bbbに存在する場合、
URL url = Thread.currentThread().getContextClassLoader().getResource("aaa/bbb/hoge.txt");
でURLが取得できます。
File file = new File(url.toFile());
というような使い方ができます。
ぽち
常連さん
会議室デビュー日: 2005/05/24
投稿数: 25
投稿日時: 2005-06-08 22:23
Edossonさん、かつのりさん、レスありがとうございます。

パスでしたか。
ServletContext#getRealPathを使用して、問題解決しました。
ありがとうございました。
1

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