人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: cabomania
●カテゴリ:ウェブ制作
✍キーワード:28 Apache Excel Final HTTP
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● くまっぷす
●38ポイント

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をここで見せればいいですよ。

◎質問者からの返答

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

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

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

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

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

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


2 ● SuckTheBlues
●38ポイント

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

◎質問者からの返答

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

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

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

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

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

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

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


3 ● SuckTheBlues
●37ポイント

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”);

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

◎質問者からの返答

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

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

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

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

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

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

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

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

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


4 ● くまっぷす
●37ポイント

http://java.sun.com/j2se/1.4.2/ja/runtime_win32.html

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はファイルを生成してどこかに置くのではなく、ブラウザから返す方法についても言及されています。参考にしてはいかがでしょうか。

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

http://www.sol.dti.ne.jp/~yoshinor/japplication/japp1007.html

Java Tips[Application]

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4307&...

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ