2012-03-02 3 views
4

나는 내가 볼 수있는 디버거에서ContextClassLoader가 느낌표가있는 경로를 반환하는 이유는 무엇입니까?

Thread.currentThread().getContextClassLoader(); 
URL url=classLoader.getResource(myconfig); 

와 WEB-INF/lib에 항아리에 파일을 열려고 : "!"

jar:file:/C:/apache-tomcat/webapps/mywebapp/WEB-INF/lib/myjarresource.jar! 
/conf/configuration.xml 

왜 파일 경로에 ? 나는이 이유 때문에 응용 프로그램이이 파일을 열 수 없다고 생각합니다. 올바른 경로를받는 방법은 무엇입니까? 감사합니다. .

+0

응용 프로그램에서 파일을 열 수없는 경우 - 스택 추적은 어떻게 보이나요? – home

답변

4

!인 것을 의미합니다. JAR 파일입니다.

myjarresource.jar!/conf/configuration.xml의 경우에는 7-zip과 같은 압축 유틸리티를 사용하여 myjarresource.jar을 열면 conf/configuration.xml이 표시됩니다. JarURLConnection javadoc에서

+0

하지만 파일 file = 새 파일 (url.toFile())이 작동하지 않습니다! – user710818

+0

예, 해당 위치에 실제 파일이 없기 때문입니다. JAR 파일의 내용을 읽으려면 JAR API를 사용해야합니다. 또는 classpath에 JAR 파일을 설정하면'conf/configuration.xml'을 직접 읽을 수 있습니다. – adarshr

2

이하는 JAR URL의 구문 설명 :

가 JAR URL의 구문은 다음과 같습니다 항아리! '!'/ {항목} 그래서

java 아카이브를 '입력'한다는 것을 나타냅니다.

편집 : 당신이 때문에 File file=new File(url.toURI())을 할 수 없다고 믿는다 ":"생성 된 URI에 두 번 나타나고 URI specifications과 호환되지 않는 (장 2.2, 3) 따라서이 파일의 ctor에서 거부된다.

관련 문제