2013-05-30 4 views
1

동적 인 웹 애플리케이션의 WEB-INF/Classes 디렉토리에 Java 클래스 UpdateStats가 있습니다.이 클래스에는 writeLog() 함수가 있습니다. 몇 가지 로그를 텍스트 파일에 씁니다.이 텍스트 파일을 웹 콘텐츠 디렉토리에 저장하고 싶습니다. 따라서 함수가 업데이트 될 때마다 통계는 해당 텍스트 파일에 기록됩니다. 문제는 WEB-INF/Classes 디렉토리에있는 해당 기능 내에서 웹 콘텐트 디렉토리에있는 텍스트 파일의 경로를 제공하는 방법입니다.WEB-INF/classes 디렉토리의 클래스에서 WebContent 디렉토리의 파일에 쓰는 방법

+1

WAR보다 수명이 긴 데이터를 저장하려는 경우이 저장 공간이 좋지 않다는 것을 잘 알고 있기를 바랍니다. deploy 폴더의 변경 사항은 WAR 파일 자체에 포함되지 않은 간단한 이유 때문에 WAR를 재배포 할 때마다 없어집니다. 지금까지 답변을 한 사람 중 아무도 이것을 고려하지 않은 것은 실망 스럽습니다. – BalusC

답변

-1

파일을 작성하려면 파일 클래스로서 절대 경로가 필요한 서버의 웹 콘텐츠 디렉토리 절대 경로를 알아야합니다.

File f = new File("/usr/local/tomcat/webapps/abc/yourlogfile.txt"); 
FileOutputStream out = new FileOutputStream(f); 
out.writeLog("Data"); 

가정 : ABC는

의 WebContent 당신이 응용 프로그램을 배포하는 디렉토리없는 프로젝트 이름입니다. 웹 컨텐츠의 모든 파일은 프로젝트 이름 바로 아래에 표시됩니다.

+0

Windows 또는 Mac 또는 다른 서버에서 작업하는 경우 어떻게됩니까? – HCarrasko

3

당신의 ServletContext에서 웹 애플리케이션 루트 디렉토리를 얻을 수 있습니다 :이 도움이

String path = getServletContext().getRealPath("WEB-INF/../"); 
File file = new File(path); 
String fullPathToYourWebappRoot = file.getCanonicalPath(); 

희망을.

0

당신은 당신이 getServletContext().getRealPath()을 수행 할 때, 서블릿에

을 다음과 같은 일을하고, 파일이 웹 콘텐츠의 위치에서 볼 수 있습니다 약간의 문자열 인수를 넣을 수 있습니다. WEB-INF에 무언가를 원하면 fileName에 "WEB-INF/my_updates.txt"를 부여 할 수 있습니다.

File update_log = null; 
final String fileName = "my_updates.txt"; 

@Override 
public void init() throws ServletException { 
    super.init(); 
    String file_path = getServletContext().getRealPath(fileName); 
    update_log = new File(file_path); 
    if (!update_log.exists()) { 
     try { 
      update_log.createNewFile(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.out.println("Error while creating file : " + fileName); 
     } 
    } 
} 

public synchronized void update_to_file(String userName,String query) { 

    if (update_log != null && update_log.exists()) { 
     FileOutputStream fos = null; 
     try { 
      fos = new FileOutputStream(update_log, true); 
      fos.write((getCurrentFormattedTime()+" "+userName+" "+query+"\n").getBytes()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (fos != null) { 
       try { 
        fos.flush(); 
        fos.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
}