Apache Tomcat/5.0.28等を用いて、Excelファイルを書き出そうとトライしているのですが、うまく行きません。


実際に実行すると、意味不明な「?」ばかりのエラー画面が出ます。
+++++
HTTP????? 500 -
type ??????
?? The server encountered an internal error () that prevented it from fulfilling this request.
??

java.io.FileNotFoundException: ..¥webapps¥sample¥sample.xls (????????????????)
(文字数制限により略)
+++++

文字数制限があり、全ての質問ができないのですが、まずはこのエラーがでる時の対処法などをお教え下さい。

poi-2.5.1-final-20040804.jar使用。

環境は
windowsXP
j2sdk1.4.2_08
tomcat5.0.28
excel2003

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:Kumappus No.1

回答回数3784ベストアンサー獲得回数185

ポイント38pt

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileOutputSt...

FileOutputStream (Java 2 $B%W%i%C%H%U%)!<%`(J SE v1.4.0)

java.io.FileNotFoundException: ..¥webapps¥sample¥sample.xls (????????????????)

が出てるんで、このパスにsample.xlsが作れないのはまずひとつありますね。


「ファイルは存在するが、普通のファイルではなくディレクトリである場合、ファイルは存在せず作成もできない場合、またはなんらかの理由で開くことができない場合は、FileNotFoundException がスローされます。」


なので、ここのディレクトリに作成できないのでは?


なお、???ばかりなのはブラウザ文字コードがUTF-8になってないから?


書き足りないときは「はてなダイアリー」に書いてそのURLをここで見せればいいですよ。

id:cabomania

御回答有難う御座います。

何故そのパスにsample.xlsが作れないのでしょうかね・・・(汗)

アドバイス有難う御座います。

早速、はてなダイアリーに詳細を書いてみました。

http://d.hatena.ne.jp/cabomania/20050916

引き続き、皆様宜しくお願い致します。

2005/09/17 02:56:33
id:SuckTheBlues No.2

回答回数11ベストアンサー獲得回数1

ポイント38pt

http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileNotFound...

FileNotFoundException (Java 2 $B%W%i%C%H%U%)!<%`(J SE v1.4.0)

java.io.FileNotFoundExceptionですから、対象のエクセルファイルが見つからないか、またはなんらかの理由でアクセスできない(たとえば、読み込み専用のファイルを書き込みのために開こうとした)ということだと思います。

id:cabomania

御回答有難う御座います。

はてなダイアリー(http://d.hatena.ne.jp/cabomania/20050916)に詳細を書いたのですが、

付属していたサンプルを用いて、

「自動的にexcelファイルを書き出す」事をしたいのですが、

自動的に書き出す以前に、sample.xlsが最初から存在するものとして、それに書き出そうとしているってことですかね・・・。

excelのシートの作成がうまくいっていないとかですかね・・・。

引き続きお願い致します。

2005/09/17 03:07:56
id:SuckTheBlues No.3

回答回数11ベストアンサー獲得回数1

ポイント37pt

2重回答になってしまいますが…。


>自動的に書き出す以前に、sample.xlsが最初から存在するものとして、それに書き出そうとしているってことですかね・・・。

いや、違うと思います。

ダイアリーのほうのソースを見せて頂きましたが、

OutputStream fso=new FileOutputStream(”../webapps/sample/sample.xls”);

ここが相対パスなのが気になります。

これを絶対パスに書き換えて試してみたらいかがでしょうか。


例えば

OutputStream fso=new FileOutputStream(”C:¥¥Program Files¥¥Apache Software Foundation¥¥Tomcat 5.0¥¥webapps¥¥sample/sample.xls”);

(¥が全角になっていると思いますが、実際は半角です。)


とか、あるいはただ単に

OutputStream fso=new FileOutputStream(”sample.xls”);

としてみて、もしエラーにならなかったとしたらファイルはどこに作成されるでしょう?

id:cabomania

何度も有難う御座います。

一番最後のように”sample.xls”にしたら、

何故か?書き出せた画面がでました!(驚)

ちなみに、ファイルは「C:¥WINDOWS¥SYSTEM32」に出ていました・・・。

環境変数が間違っているのでしょうか。

ご迷惑おかけします。これが解決できたら、無事終了となりそうです。

全くわからないのですが、googleを「system32」等で検索したりしました。

「System32 の下に java.exe」とかのような事なのでしょうか・・・。

http://java-house.jp/ml/archive/j-h-b/028277.html

2005/09/24 17:29:26
id:Kumappus No.4

回答回数3784ベストアンサー獲得回数185

ポイント37pt

JavaのVMからの相対パスで動いていますね>FileOutputStream


Windows XPの場合はVMはC:¥Windows¥System32¥java.exeに置かれるので、何も考えずに

FileOutputStream(”hoge.xls”)と書くとカレントディレクトリであるC:¥Windows¥System32の下にhoge.xlsができたのでしょう。

ですのでやりかたとしては、絶対パスで指定するか、C:¥Windows¥System32からの相対パスで指定するかになります。

(2番目のURLにあるように、セパレータ(¥,/)は

System.getProperty(”file.separator”)を使うと長くなりますけど移植性がよくなります。)

また、3番目のURLはファイルを生成してどこかに置くのではなく、ブラウザから返す方法についても言及されています。参考にしてはいかがでしょうか。

(というのもこちらにも書かれていますけど、外部からの操作でファイルをいったん作ってどこかに置き、さらにそれを見せるのはセキュリティ上弱点を作りそうですからね)

id:cabomania

Kumappusさん、本当にご親切に有難う御座いました。

とてもわかりやすいご回答に感謝しております。

教えて頂いたURL先を見て勉強します。

皆さんも有難う御座いました。

2005/09/24 17:31:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません