2011-10-17 4 views
0

필자는 필자의 필터에서 파일에 글을 쓰고, 필자가 올바르게 작성했는지 확인하기 위해 이클립스에서 읽을 수 있어야한다.서블릿 필터에서 파일에 쓰고 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 블록에서 수행). BTW 당신이

그러나 쉽게 파일을 처리 할 것이다 commons-ioFileUtils 또는 guavaFiles을 사용할 수 있습니다, 일반적인 관행은 다음 재배포 그들을 잃을 것이기 때문에, 웹 애플리케이션 디렉토리에있는 파일을 작성할 수 없습니다. 저장할 외부 위치를 선택/구성하십시오.

+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(); 
} 
관련 문제