ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("com/x/y/z.cfg");
File file = new File(url.getPath());
이것은 Eclipse에서 jar 파일을 실행할 때 작동하지만 jar 파일에서 실행할 때 작동하지 않습니다.classLoader.getResource가 jar 파일에서 작동하지 않습니다.
는java.io.FileNotFoundException : 파일 : \의 C :! \ 사용자 노바 \ 바탕 화면 \ Matcher.jar \ \ C 톰 \ X \ Y \ z.cfg
이것은 아니다 중복. 다른 모든 질문을 확인했지만 유용한 정보는 없습니다.
일단 '파일'을 가지고 있다면 어떻게해야할까요? JAR에서 자원에 대해 얻는'URL'로부터'File'을 생성 할 수 없습니다 ('file :'URL이 아니기 때문에 일반적으로'jar : file : /path/to/file.jar!/com/x/y/z.cfg'), 사용하는 API가'File' 대신에'URL' 또는'InputStream'을 받아 들일 수 있다면 당신은 그렇게 할 필요가 없습니다. –
이것은 여러 번 설명됩니다 : [여기] (http://stackoverflow.com/questions/944610/how-do-i-access-a-config-file-inside-the-jar), [here] (http : //stackoverflow.com/questions/20389255/java-reading-a-resource-file-from-within-jar), [here] (http://stackoverflow.com/questions/403256/how-do-read -a-resource-file-from-java-jar-file? rq = 1). 왜냐하면 File은 파일 시스템 객체를 나타내며 jar의 내용은 파일 시스템에서 액세스 할 수 없기 때문입니다 (그러나 Java는 어떤 식 으로든이를 InputStream처럼 처리 할 수 있습니다). –
URL.getFile() *은 URL을 유효한 파일 경로로 변환하지 않습니다. URL의 경로 부분 만 반환합니다. (자바 1.0 시대에 대부분의 URL은 실제 파일을 참조 했으므로 그 이름은 getFile입니다.) – VGR