2012-02-04 2 views
1

JAR 파일에서 패키지하고 실행하는 Java 프로그램을 작성했습니다.파일로드 외부 Jar 파일로

키 = 값

형식 : 단순히 텍스트 라인 일부 사용자가 변경 가능한 구성 파일이 필요합니다. 이 파일들을로드하기 위해 나는 here 클래스를 사용했다. Netbeans IDE를 통해 프로그램을 실행할 때 프로젝트 등록 정보에 구성 파일을 저장하는 디렉토리가 포함되어 있으므로 제대로 작동합니다.

내 응용 프로그램을 JAR 파일로 빌드 할 때 문제가 발생합니다. 구성 파일을 사용자가 편집 할 수있게하려면 JAR의 외부에 있지만 동일한 디렉토리에 보관해야하지만 이제는 명령 줄에서 응용 프로그램을 실행할 때 구성 파일을 찾을 수 없습니다. ROOT 폴더의 JAR 파일에 수동으로 파일을 추가하면 모두 정상입니다.

그렇다면 Java에로드 가능한 파일의 JAR 외부를 보이게하려면 어떻게해야합니까? -classpath 옵션은 아무 효과가 없습니다.

답변

0

this 질문을 참조하여 해결했습니다. jar 파일의 MANIFEST 파일에 현재 디렉토리를 추가했습니다.

왜이 경우에는 -classpath 옵션이 무시됩니까? 보안?

+0

죄송합니다. 그렇게 접근하지 못했습니다. manifest가있을 때'java'가'-classpath'를 무시하는 이유는 아마 그렇습니다. 또한 사물을 단순화합니다 (충돌하는 경로 등은 없습니다) –

+0

문제 없습니다. 필자가 Javaworld 링크에서 사용한 Propertiesyloader 클래스의 목적은 가능한 한 구성 파일의로드를 단순화하는 것이 었습니다. 또한 Netbeans는 빌딩에 대한 매니페스트에 대한 수동 조정을 허용하지 않습니다 (어쨌든 말할 수있는 한). – Kerry

3

로드하는 방식이 일 때이 필요하기 때문에 병에서 실행하는 경우 .jar 내부에 있거나 그렇지 않은 경우 프로젝트 디렉토리 내부에 있어야합니다. 클래스 로더를 사용하여 파일을 찾을 위치를 알려줍니다. 당신이 .JAR 외부 파일을 열려면

, 당신은 단지 File로 열고 그것을 읽을 필요가있다. 우리는이 같은 외부 파일 이름을 가지고하는 것입니다 접근 한 방법

하나 명령 행의 옵션 (예 : java -jar myJar.jar -f filename). 이를 통해 파일의 위치를 ​​명시 적으로 지정할 수 있습니다. 그런 다음 기본 위치에서 또는 파일이 명령 행에 지정되지 않은 경우 .jar에서 볼지 여부를 결정할 수 있습니다.

+0

파일이 JAR 파일에 있어야한다고 말하면 참조 할 수 있습니까? Netbeans을 통해 응용 프로그램을 실행할 때로드되는 방식을 이해하지 못합니다. 내가 아는 한 JAR 파일을 .class 파일로 만들지는 않는다. 어쨌든 JAR 파일을 찾지 못했습니다. – Kerry

+0

@Kerbu - 제가 작성한 문장의 두 번째 부분을 읽으십시오. 컴파일 된 클래스 *가 항아리에없는 경우 * 클래스 로더는 프로젝트의 디렉토리 구조 (컴파일 된 .class 파일의 위치)에 위치를 반환합니다. –

+0

브라이언에게 감사드립니다. 나는이 문제를 해결했다. 내 대답은 아래를 참조하십시오. – Kerry

0

나는 똑같은 문제가있어서 게시물을 보았지만 결국 대답은 간단했다.

Java Webstart를 통해 배포 된 응용 프로그램을 Netbeans 7.3에 구축하고 있습니다.

런타임시 사용자 환경 설정 (예 : "내 비밀번호 기억")로 업데이트되는 config.xml 속성 파일이 있습니다. 따라서 jar 파일의 외부에 있어야합니다.

Netbeans은 프로젝트 폴더 아래에 'dist'폴더를 만듭니다. 이 폴더는 프로젝트 jar 파일과 jnlp 파일을 포함합니다. config.xml을 dist 폴더에 복사하고 속성 파일을 표준을 사용하여로드했습니다.

FileInputStream in = new FileInputStream("config.xml"); 
    testData.loadFromXML(in); 
    in.close();