- ベストアンサー
サーバー上のファイル?
以下のようなソースを用意しました。 これでFileRead.csvというファイルが 作成されたはずです。 しかし、そのファイルがどこにも 見当たりませんし、 入っているはずのstrlinesという 文字列も入っていません。 どこが悪いのでしょうか? また、ファイルはどこにあるのでしょうか? PrintWriter writer = null; writer = new PrintWriter(new BufferedWriter(new FileWriter("FileRead.csv"))); writer.println("strlines"); writer.close();
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
いろいろ検討しましたがサーバー上にあるFileReadと いうかサーバー上に記録したFileReadを クライアントでダウンロードしたいという感じでしょうか。 WriteFile5.jsp <%@ page contentType="text/html; charset=Shift_JIS" import="java.io.*" %> <% try { String filename = "C:\\FileRead.csv"; // コンテンツ タイプを "APPLICATION/OCTET-STREAM" に設定します。 response.setContentType("APPLICATION/OCTET-STREAM"); // http content-disposition ヘッダーを初期化し // 添付ファイルと既定のファイル名 "myFile.txt" を // 指定します。 String disHeader = "Attachment;filename=\"FileRead\""; response.setHeader("Content-Disposition", disHeader); // ファイルをバイト単位で応答オブジェクトに転送します。 File fileToDownload = new File(filename); FileInputStream fileInputStream = new FileInputStream(fileToDownload); int i; while ((i=fileInputStream.read())!=-1) { out.write(i); } fileInputStream.close(); out.close(); }catch(Exception e) // ファイル IO エラー { e.printStackTrace(); } %>
その他の回答 (3)
まったくやりたことが見えてこないんですが、とりあえず問題は解決したのでしょうか? ダウンロードと、この質問の内容は無関係ですよ。 ダウンロードというのは、サーブレットからのことでしょうか。 生成したCSVファイルをServletResponse#getOutputStreamで取得したServletOutputStreamに出力してもダメですか?
お礼
ご指摘ありがとうございました。 まさに、ファイルの作成とファイルのダウンロードを 分けて考えていなかったのが根本的な原因でした。 ありがとうございます。
- fortranxp
- ベストアンサー率26% (181/684)
>("FileRead.csv") フォルダ名がJavaの場合 ("C:\\Java\\FileRead.csv") のようになるのでないでしょうか。
補足
確かにそうです。 ただ、ダウンロードする側が自分以外の場合、 どんなフォルダを作っているかわからないので C:\\Java\\FileRead.csvのような書き方が 出来るのかどうか不安なのです。 大丈夫なのでしょうか??
例外も発生してないのであれば、おそらくjavaコマンドを発行したルートパスになると思います。
補足
ありました! 検索しても出てこなかったのですが・・・ ありがとうございます(ミ ̄ー ̄ミ) ただ、保存しないで開くを選ぶと白紙の エクセルファイルが出てきます。どうして 表示されないのでしょうか・・・? (j o j)
お礼
教えていただきありがとうございました。 HTTP protocolについて知識がほとんど皆無に近く、 ソースを直す能力すら無い状態です。 とりあえずコンテクストを 修正してtry~catchを追加する ことでうまくいきました。 つたない説明でよく理解してくれたと 感激です。 ありがとうございました。