2012-02-10 4 views
0

우선 제목이 설명과 다를 수 있지만 그와 같은 짧은 방법으로 설명하기는 어렵습니다.웹 응용 프로그램에서 사용되는 JAR 파일의 상대 경로

속성 파일에서 읽어야하는 Java 응용 프로그램 (웹이 아닌)이 있습니다. 이 Java 응용 프로그램은 JAR 파일로 내 보내야 만 웹 응용 프로그램에서 사용되지만 특성 파일은 JAR 파일에 들어 있지 않습니다. 그 결과는 다음과 같습니다 myJavaApp.jar로 내보내집니다 Java 응용 프로그램을 코딩 할 때

/webapps/MyWebApp/WEB-INF/myJavaApp.jar 
/webapps/MyWebApp/WEB-INF/config.properties 

그래서, 내가 그것을 할 수없는 나는 그것이 상대 경로에서 config.properties 파일을 읽을 것 때문에. 절대 경로를 입력하면 제대로 작동합니다.

properties.load(new FileInputStream("C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/MyWebApp/WEB-INF/config.properties")); 

그러나 상대 경로를 사용하려고하면 작동하지 않습니다. 나는 다른 웹 페이지 또는 여기에서 다른 해결책을 시도했다 그러나 그들 중 누구도 일하고있다.

거의 잊어 버렸습니다. 속성 파일을 읽는 클래스는 정적입니다!

누군가가이 문제에 대해 밝힐 수 있다면 많은 도움이 될 것입니다.

고맙습니다. 자바 응용 프로그램에서

답변

0

파일이 classpath에 있는지 확인하는 경우 YourClassName.class.getResourceAsStream("/config.properties")으로로드하면됩니다. 그것은 그것을 구현하는 가장 쉬운 방법 일 것입니다. 웹 응용 프로그램의 경우 파일을 WEB-INF/classes/에 넣고 독립 실행 형 응용 프로그램의 경우 응용 프로그램을 시작할 때 클래스 경로를 설정하기 만하면됩니다.

+0

작동 중입니다! 속성 파일을 웹 응용 프로그램 디렉토리의 맨 위에두기 위해'../../../ config/config.properties'를 추가했습니다. 문제는 이제 config 파일을 수정하면 Tomcat을 다시 시작해야 응용 프로그램을 사용할 수 있다는 것입니다. (이 문제를 방지 할 수있는 방법이 있습니까? 절대 경로를 사용했을 때 설정 파일을 수정할 수 있었기 때문에 '.감사합니다 – Jinka

+0

상대 경로'../../../ config/config.properties'를 사용하고 싶지 않습니다. classpath (또는 subdir)는이 리소스가 살기에 완벽한 장소입니다. –

+0

Tomcat을 재시작해야한다면, 아마도'antiResourceLocking'을 사용하고 있습니다. 모든 것을 다른 곳으로 복사하게할까요? –

0

, 당신은에 의해 현재 디렉토리의 절대 경로를 얻을 수 있습니다 : 동일한 디렉토리에있는 config.properties이 가정

System.getProperty("user.dir"); 

를,이 파일의 절대 경로를 알아낼 수 있어야한다 자바 코드에서 코드의 절대 경로를 하드 코딩하지 않고도 어디서나 배포 할 수 있습니다.

편집 :

자바 응용 프로그램이 실행 JAR 경우, 그것은 직접 호출하는 경우에만 올바른 디렉토리를 반환 명령 위. Windows 플랫폼에서이 프로세스를 간접적으로 다른 프로세스에서 호출하면 시작 디렉토리는 windows/system32가되므로 jar가 호출되는 방식을 분석해야합니다. 후자의 경우, jar에 속성 파일의 경로를 제공하는 기능을 웹 응용 프로그램에 추가하는 것이 좋습니다.

+0

Java 응용 프로그램을 테스트 할 때 작동하지만 일단 JAR로 내 보내어 웹 응용 프로그램으로 실행되면 작동하지 않습니다. 어쨌든 고마워! – Jinka

+0

을 JAR로 내보내는 것은 결과를 변경해서는 안되며, 그 이유는이 항아리를 실행하는 위치의 참조 일 수 있습니다. 상대 경로는 아마도 그 참조에서 나온 것입니다. 파일이 JAR 자체 (새로운 FileInputStream)의 일부가 아니기 때문에 – Johnydep

+0

나는 생각할 수있는 모든 디렉토리에 config.properties를 넣으려고했으나 제대로 작동하지 않았습니다. 왜 그런지 모르겠지만 뭔가 잘못했다고 생각합니다./ – Jinka

관련 문제