2017-05-15 3 views
0

작업중인 패키지에서 .JAR 파일을 만들려고하는데 문제가 발생했습니다. 나는 사용자가 프로그램이 실행되는 속성을 수정할 수 있기를 바랍니다.jar 실행시 속성 파일 덮어 쓰기

내 패키지의 폴더 구조는 다음과 같습니다

├───src 
│ ├───main 
│ │ ├───java 
(...) 
│ │ └───resources 
│ │   dbinterface.properties 

와 나는 dbinterface.properties이 단지 같은 폴더에 사용자의 장소 하나 (또는 ​​나란히 ./config 폴더와 파일을 대체하려면).

MANIFEST.MF의 클래스 경로에 .을 추가하려고했지만 불행히도 작동하지 않았습니다.

+0

어떻게 속성 파일을로드합니까? –

+0

configs는 다음 행에로드됩니다. List configs = Arrays.asList (새 ResourceBundle [] {ResourceBundle.getBundle ("oracle"), ResourceBundle.getBundle ("dbinterface")}) dbinterface.properties 파일 만 덮어 씁니다. – padrino

답변

2

속성 파일 읽기 방법에서 이러한 동작을 구현할 것입니다. 먼저 사용자가 작성할 수있는 위치에서 등록 정보 파일을 읽으려고 시도하고 찾을 수없는 경우 원래 기본 파일로 폴백 할 수 있습니다. 뭔가 같이 :

FileInputStream propFile; 
try { 
    propFile = new FileInputStream(new File("dbinterface.properties")); 
} catch (FileNotFoundException e) { 
    propFile = new FileInputStream(new File("resources/dbinterface.properties")); 
} 
Properties p = new Properties(); 
p.load(propFile); 
propFile.close(); 
+0

이것은 내 마음을 넘어 섰습니다. 그러나 가능하다면 저는 이것을 피하고 싶습니다. Maven으로 패키지를 가져오고'dbinterface.properties' 파일을 내 resources 폴더에 추가하면 작동합니다. 그래서 내 코드에서 jar 파일을 빌드 한 후에 이것이 가능할 지 궁금합니다. – padrino

1

사용자 편집 가능한 속성을 저장하는 가장 좋은 장소는을 사용자가 홈 디렉토리입니다. 자바에서는 시스템에 독립적 인 사용자가 System.getProperty("user.home")을 통해 액세스 할 수 있습니다. 이 점은 리눅스에서는 /home/$USER, Windows에서는 %USERPROFILE%을 가리 킵니다. 다른 모든 OS도 지원됩니다.

먼저 사용자가 만들 수있는 위치에서 속성 파일을 읽고 찾을 수없는 경우 원래 기본 파일로 폴백 할 수 있습니다. - Galcoholic

나는 이것을 피하고 싶습니다. - 패드 리

왜?

  • 먼저 속성을 당신이 프로그램을 delevered 파일을 읽고, 다음
  • (시도) 사용자가 new File(System.getProperty("user.home"),".myProgram/dbinterface.properties") 에서 변경된 설정을 읽을 수 (기본적으로 다음과 같습니다

    이 최선의 방법입니다 @Galcoholic에 의해 제안 된 다른 방법 arount)

Properties 클래스를 사용하여 JVM에서로드 할 때 설정이 자동으로 병합됩니다.