2011-10-17 32 views
0

私のフィルタからファイルに書き込んで、それをEclipseで読み込んで、正しく書き込んでいることを確認したいと思います。サーブレットフィルタからファイルに書き込んでEclipseで読み込むにはどうしたらいいですか?

このコードはうまくコンパイルされて実行されますが、ファイルを読むためにどこに行くことができないのか、何か書いたことがあってもわかりません。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    HttpServletRequest req = (HttpServletRequest) request; 

    System.out.println("filter invoked"); 

    InputStream in = null; 
    OutputStream out = null; 
    String inPath = context.getRealPath("/WEB-INF/template.txt"); 
    String outPath = context.getRealPath("/WEB-INF/output.txt"); 
    in = new FileInputStream(inPath); 
    out = new FileOutputStream(outPath); 

    OutputStreamWriter outstream = new OutputStreamWriter(out); 
    outstream.write("hello"); 


    // pass the request along the filter chain 
    chain.doFilter(request, response); 
} 

ファイルtemplate.txtとoutput.txtは、WEB-INFディレクトリにあります。私はファイルからの読み取りがうまく動作することを確認しましたが、書き込みを確認することはできません。 output.txtに書き込むたびに、ファイルに変更はありません。

ウェブアプリケーション環境でファイルに書き込むことについて、私は何を理解していませんか?

答えて

3

ストリームを閉じる必要があります(ストリームを閉じる必要があります)(finallyブロック内のストリームで行う)。ところで、あなたは

ファイルの取り扱いが容易になりますどのcommons-ioFileUtilsまたはguavaFilesを使用することができますが、一般的には、あなたが次の再デプロイにそれらを失うことになるので、webappディレクトリ内のファイルを書くことではありません。格納する外部ロケーションを選択/設定します。

+0

ファイルをfinallyブロックで閉じました。私は私のプロジェクトのディレクトリツリーをリフレッシュしました。私は/WEB-INF/output.txtを開きましたが、まだ空白です。 – peter

+0

あなたはfileutils/guavaオプションを試しましたか? – Bozho

+0

実際、私はあきらめました。とにかく出力ファイルはちょうど一時的だったので、代わりにStringBuilderを使用しました。なぜ私はそれを前に考えなかったのか分かりません。 – peter

1

また、最終的にブロックしようとすることを忘れないでください。

OutputStreamWriter outstream = new OutputStreamWriter(out); 
try { 
    outstream.write("hello"); 
} finally { 
    outstream.close(); 
} 
関連する問題