2013-08-01 2 views
0

다음과 같은 문제가 있습니다. jar 파일을로드하려고하지만 동일한 상대 경로에 같은 파일이 있습니다. "res/rtrconfig"파일이 jar 파일입니다. 어떻게하면 외부 파일을 무시하고 jar 파일 경로를 가져올 수 있습니까? 내 코드의 다른 부분이 필요하기 때문에 외부 파일을 삭제할 수 없습니다. 내가 지금까지있어 무엇 : 파일이 단지 또는 경로에 설립되어있는 경우 코드 검사Java에서 파일 외부에 jar 파일을로드하는 방법은 무엇입니까?

ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
     URL url = loader.getResource(path); 
     //check if file is in jar or not 
     if (url == null) { 
      System.err.println("FATAL: Properties file not found.Stopping the server."); 
      System.exit(-1); 
     } 
     if (!url.getProtocol().equals("jar")){ 

      System.err.println("Properties found outside jars.Please delete " + url.getPath() + " and re-start the server"); 
      System.exit(-1); 
     } 

이 부분. 경로의 파일 앞에 jar 파일을보기 위해 URL을 구성하는 방법을 모르겠습니다. 시간 내 주셔서 감사합니다.

+0

위의 코드는 무엇을 반환합니까? 자원이 항아리 안에 있지 않습니까? 그렇지 않다면, 지나가는 경로의 값은 무엇이며 항아리 안의 자원의 전체 이름은 무엇입니까? –

+0

"jars 외부에서 발견 된 속성입니다. 삭제하십시오"+ 여기서 절대 경로는 + "이고 서버를 다시 시작합니다". res \ rtrconfig는 자원의 이름입니다 – nucandrei

답변

1

당신은 모든 자원이

Enumeration<URL> urls = ClassLoader.getSystemClassLoader().getResources(path); 

파일의 URL이 "파일"프로토콜을해야합니다 얻을 수

while (urls.hasMoreElements()) { 
     URL url = urls.nextElement(); 
     if (url.getProtocol().equals("file")) { 
      ... 
     } 
    } 
+0

고맙습니다. 그런 식으로 가고 있었지만 Enum과 어떻게 해야할지 몰랐습니다. :) – nucandrei

0

당신이 스프링 사용이 외부 항아리에서 jar 리소스 파일을 얻을 작동합니다.

ClassPathResource resource = new ClassPathResource ("schema/feed.xsd");

관련 문제