2011-12-17 3 views
1

java.util.Properties 클래스를 사용하여 파일에 설정을 저장하는 응용 프로그램이 있습니다. 나는 파일이 방법을로드 :명령 줄에서 .jar을 실행할 때 액세스 할 수 없습니다.

props.load(new FileInputStream("c2c_stngs.prop")); 

모든 또한, IDE에서 잘 작동 구축 및 .jar 파일을 더블 클릭 한 후 작동합니다. 나는이 같은 명령 줄에서 실행하려고 할 때

는 내 문제는 시작합니다

java -jar c:\Works\project.jar 

그것은 오류가 발생합니다 :

java.io.FileNotFoundException: c2c_stngs.prop (The system cannot find the file specified) 

내가 같은 폴더에 c2c_stngs.prop 파일이 있습니다. jar 파일. 또한 관리자로 cmd을 실행하려고했지만 여전히 동일합니다.

+2

속성이 일정하게 유지되거나 사용자 (또는 응용 프로그램)가 편집 할 수 있습니까? 또한 [이 답변] (http://stackoverflow.com/questions/5052311/how-can-a-java-program-use-files-inside-the-jar-for-read-and-write/5052359#5052359)을 참조하십시오.)를 사용하여 편집 가능한 속성을 사용하는 것이 좋습니다. –

답변

3

경로를 통해 항아리에 액세스했기 때문입니다. 스크립트를 다음과 같이 변경해보십시오.

C: 
CD \Works 
java -jar project.jar 

문제가 해결되었지만 해결되지는 않습니다. jar 파일의 위치에 항상 등록 정보 파일이있을 것으로 예상되면 jar 파일을 찾아야합니다. 그것에 대해서는 Finding the path to a jar from a Class inside it?을 참조하십시오. 같은

뭔가 : 당신은 당신의 등록 정보 파일을로드 할 상대 경로를 사용하고

File propertiesFile = new File("c2c_stngs.prop"); 
if (!propertiesFile.exists()) { 
    // Wont work 'cause getLocation returns a URL but you get my drift. 
    propertiesFile = new File(getLocation(this.class), propertiesFile); 
} 
+0

감사합니다. 간단했습니다. 당신은 믿지 않을 것이다. 나는 regedit을 조사하여 .jar를 더블 클릭하여 작동하게하는 추가 인수가 있는지 살펴보기 시작한다.) –

2

. 즉, 코드는 등록 정보 파일이 프로그램을 시작하는 디렉토리에 있어야 함을 의미합니다. 따라서 java을 시작할 때 c:\에 있으면 파일은 c:\이어야하며 jar 파일이있는 디렉토리가 아니어야합니다.

속성이 read_only 인 경우 파일은 jar 파일이어야하며 Class.getResourceAsStream()을 사용하여 클래스 경로에서 파일을로드해야합니다. 읽기/쓰기 인 경우 절대 경로를 사용하여 파일을로드하십시오.

+0

고마워, 나는 그것에 대해 생각해 봤지만 잘 작성해야한다. 내 배포 스크립트는 특정 디렉토리에 jar 파일을 복사하므로 경로를 하드 코딩했습니다. –

관련 문제