우선, 많은 S.O.를 읽었습니다. 이 주제에 관한 질문과 나는 그들에게 제안 된 것들을 시도했다.컴파일 된 jar의 리소스에 어떻게 액세스해야합니까?
여기 내 상황입니다. Processing 프레임 워크를 사용하여 Java 응용 프로그램을 작성 중이며 응용 프로그램 패키징에 대해 생각할 필요가있는 마지막 단계에 있습니다. 명령 줄에서 실행 가능한 jar 파일은 Eclipse에서 내보내기 기능을 사용하여 빌드하려고 시도한 것입니다.
내 프로젝트의 구조는 다음과 같습니다
src/
multiple packages/
libs/
jar files and natives
data/
fonts and images
config/
json files
나는 jar 파일을 수출하고 내용의 검사를 위해 단지 uzip, 나는이 DIRS의 내용이 최상위에 버려진 된 것을 발견하면 .jar의. 다음과 같습니다
:
.jar
packages
jar files
fonts
json files
그래서, 내가 좋아하는 뭔가 설정 파일을로드 할 때 : 이클립스에서 응용 프로그램을 실행할 때
BufferedReader reader = new BufferedReader(new FileReader(path));
모든 그냥 파일을 사용할 수 있습니다. 그러나 jar 파일은 FileNotFoundException
을 던집니다.
S.O에서 본 많은 질문 중 하나입니다. 이러한 문제에 대해서는 class.getClass().getResource()
또는 class.getResourceAsStream()
을 사용하는 것이 좋습니다. 나는에서 이러한 사용하여 상대 경로와 파일 이름 만 모두 시도 :
class.getResource('config.json');
class.getResources('cfg/config.json');
class.getResourceAsStream('../../config.json');
이러한 방법은 모두 null를 돌려 사용하는 이클립스 또는 항아리 중 하나에서 실행하면
java -jar myjarfile.jar
내가 또한 Ant 파일을 사용할 수 있습니다. 사실, 이제 내보내기 기능으로 생성 된 Ant 파일을 사용하여 jar 파일을 빌드하고 있습니다. 거기에 뭔가를 추가 할 수있는 항아리에 디렉토리를 추가하는 것도 좋을 것입니다.
답변 해 주셔서 감사합니다. getResource()에 추가로 슬래시를 사용하도록 제안 하시겠습니까? – JeremyFromEarth
이것은 훨씬 더 가까워 보인다. 이 경로가 반환하는 경로는 다음과 같습니다. jar : file :/C : /path_to_project/myjarfile.jar! /config.json 그러나 jar 파일을 실행할 때 경로가 올바른 경우에도 파일이 예외가 아닙니다. 필자도 Eclipse 내에서 작동 함을 언급해야합니다. – JeremyFromEarth
Jars 내부의 리소스로 FileReaders를 사용할 수 없습니다. getResourceAsSTream에서 리턴 된 InputStream을 사용해야합니다. –