実際に実行すると、意味不明な「?」ばかりのエラー画面が出ます。
+++++
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
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をここで見せればいいですよ。
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のシートの作成がうまくいっていないとかですかね・・・。
引き続きお願い致します。
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」とかのような事なのでしょうか・・・。
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]
Kumappusさん、本当にご親切に有難う御座いました。
とてもわかりやすいご回答に感謝しております。
教えて頂いたURL先を見て勉強します。
皆さんも有難う御座いました。
御回答有難う御座います。
何故そのパスにsample.xlsが作れないのでしょうかね・・・(汗)
アドバイス有難う御座います。
早速、はてなダイアリーに詳細を書いてみました。
http://d.hatena.ne.jp/cabomania/20050916
引き続き、皆様宜しくお願い致します。