2010-03-03 3 views
1

최근에 Eclipse를 사용하여 Java로 웹 프로젝트를 만들었습니다. 타이머 작업을 포함하는 서블릿이 있습니다. 이 타이머 태스크는 내가 작성한 XML Writing 클래스의 "writeList"메소드를 호출합니다. 이 모든 것은 정상적으로 작동하며 System.out을 사용하여 매분마다 실행되는지 확인했습니다.Eclipse 웹 프로젝트 내의 Java Servlet에서 FileOutputStreams 및 Jena 모델 사용

Eclipse에서 응용 프로그램으로 XML Writing 클래스를 실행할 때 제대로 작동합니다. 파일은 'WebContent/test.rdf'로 아무 문제없이 출력됩니다. 라인에서

java.io.FileNotFoundException: WebContent/Test.rdf(No such file or directory) 
    at java.io.FileOutputStream.open(Native Method) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179) 
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70) 
    at com.XMLWriter.writeList(XMLWriter.java:58) 
    at com.ServerTimer$1.run(ServerTimer.java:30) 
    at java.util.TimerThread.mainLoop(Timer.java:512) 
    at java.util.TimerThread.run(Timer.java:462) 

코드는 다음과 같이 XMLWriter가 58입니다 : 그것은 내 서블릿에서 타이머 태스크에 의해 불려 그러나

, 나는 다음과 같은 오류를 얻고있다

fileOut = new FileOutputStream("WebContent/TEST.rdf"); 
model.write(fileOut); 

fileOut은 FileOutputStream이고, model은 Jena 모델의 인스턴스입니다. RDF로 작업하고 있기 때문입니다.

어떤 도움을 주시면 감사하겠습니다. 어떤 질문이라도 알려주세요!

EDIT : 이제 작동하지만 웹 프로젝트의 'WebContent'디렉토리에 파일을 쓰고 싶습니다. 이 작업을 자동으로 수행 할 수있는 방법이 있습니까? 시스템에서 동적으로 해당 디렉토리를 찾을 수 없습니다.

+0

검사와의 WebContent는 존재 : /TEST.rdf가 공개 웹 콘텐츠의 루트에있는 가정하면, 당신은 서블릿 내에서 다음과 같은 방법을 /TEST.rdf 절대 디스크 파일 시스템 경로를 얻을 수 있나요? – user181750

답변

0

그런 식으로 절대 상대 경로에 의존해서는 안됩니다. Java IO에서 상대 경로를 사용하면 이식성 문제가 발생합니다. java.io.File을 알고 있습니다. 실제로 실행중인 웹 응용 프로그램 컨텍스트에 대한 내용은입니다. 실제 경로는 모든 작업 환경에서 동일하지 않으며 현재 서버/응용 프로그램을 시작한 방법에 따라 다릅니다. . 예를 들어 C:/Tomcat/bin과 관련이있을 수 있으며 TEST.rdf은 분명히 존재하지 않습니다. 항상 절대 경로 (예 : 디스크 파일 시스템 경로 사용)를 사용합니다. 당신은 절대 디스크 파일 시스템에 상대 경로를 변환하는 ServletContext#getRealPath()를 사용하여 웹 어플리케이션는 JSP/서블릿 경로 자바 IO 물건에 더 사용할 수있는 경우

. 상대적 웹 경로는 공개 웹 콘텐츠를 근간으로합니다. 권한에 대한

String relativeWebPath = "/TEST.rdf"; 
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath); 
File file = new File(absoluteDiskPath); 
+0

훌륭하게 일했습니다! 고마워요! – CGOBE

0

디렉토리가 존재하지 않기 때문입니다. 디렉토리를 프로그래밍 방식으로 만들거나 오프라인으로 만들거나 기본 경로에 폴더를 만듭니다.