2012-11-15 3 views
2

ResourceBundles과 비슷한 시스템이 필요합니다. 단, 현지화에는 사용하지 않습니다. 기본적으로 여러 버전의 설정을 저장해야합니다. 해당 설정의 한 버전은 Properties 파일로 표시 할 수있는 String-to-String 맵입니다. 이러한 설정 버전은 응용 프로그램 .jar (모두 PropertyResourceBundle) 내의 파일 시스템에 쉽게 유지되어야합니다.다른 지역화 데이터를 유지하기위한 "리소스 번들"

아이디어는 응용 프로그램 시작시 사용자 결정에 따라 선택할 수있는 유형 문자열의 키 - 값 쌍으로 표시되는 응용 프로그램 설정 (설정 프로파일)의 서로 다른 버전을 갖는 것입니다. 다시 말하지만 이들은 언어 버전이 아니기 때문에 (javadoc에 따라) ResourceBundle은이를 구현하는 올바른 방법이 아닙니다.

쉬운 방법으로 전체를 구현하지 않고 어떻게 할 것인가? 타사에게 Java SE 클래스 만 사용해야한다고 제안하지 마십시오.


편집 : 나는 한 가지 중요한 세부 사항을 언급하는 것을 잊었다. 이런 흐름을 얻는 것이 어려울 것입니다 : Thread.currentThread().getContextClassLoader().getResourceAsStream("/your/resource/here");. 이는 특성 파일을 포함 할 프로젝트가 Ant에 의해 컴파일되고 실제로 실행되는 다른 GUI 프로젝트에서 동적으로로드 된 라이브러리로 사용되기 때문입니다. 고정 된 프로젝트 폴더에있는 모든 속성 파일을 가지고있을 수도 있지만 Thread.currentThread().getContextClassLoader()은 GUI 프로젝트의 컨텍스트를 반환하기 때문에 그 프로젝트에서 앤트에 의해 배치 된 속성 파일이있는 .jar 파일이 어디에 있는지 알 수 없습니다. 무엇을 사용해야할지 모릅니다. "/your/resource/here".

내가 질문을 잘못 이해했을 수도
+1

'java.util.Properties'를 사용하는 것은 어떻습니까? 현재 프로파일에 따라 특성 파일을로드하고 프로파일이 변경되는 즉시 다시로드하십시오. – SpaceTrucker

+0

그게 내 마음에 왔지만'ResourceBundle'에 대해서 내가 좋아하는 것은 자동으로 .properties 파일 위치를 찾는다는 것입니다. 현재 프로파일에 따라'.property' 파일을 수동으로로드한다면 내 응용 프로그램의 위치에 따라'.properties' 파일의 위치를 ​​찾는 지저분한 코드가있어서'FileInputStream'을 생성하고 파일을'Properties'에 저장합니다. – drasto

+0

하지만 프로필 설정을 저장해야하는 규칙을 사용하는 것이 좋습니다. 따라서 어디에서나 찾아 볼 필요가 없습니다. – SpaceTrucker

답변

2

그러나 날 것으로 보인다 쉽게 같은 것을 할 수 있습니다

InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/your/resource/here"); 
Properties prop = new Properties(); 
prop.load(inputStream); 

이뿐만 아니라 자바 EE 환경에서 안전하고 당신은 당신이 경우 필요를 언제 호출 할 수 있습니다 설정을 변경하고 싶습니다.

업데이트 : 리소스가 클래스 경로에있는 한 리소스의 전체 경로도 알지 못해도 찾을 수 있어야합니다.

+0

좋은 지적 - 하나의 중요한 세부 사항을 언급하는 것을 잊어 버렸습니다. 리소스가 클래스 경로에있을 것입니다 (또는 런타임에 리소스가있는 프로젝트가 동적으로로드됩니다). 그러나 정확히 어디 있는지 알 수 없습니다. 전체 경로를 지정하지 않고도 계속 찾을 수 있습니까? 자세한 내용은 내 질문 편집을 참조하십시오. – drasto

+0

동적으로로드 된 JAR은 무엇을 의미합니까? 속성이 GUI 프로젝트에서 참조하는 JAR 파일에 있으면 클래스 경로에 그대로 있으므로 가져올 수 있어야합니다. 당신은 어딘가에 그들을 배치해야합니다. 또한 Ant 스크립트를 변경할 수 있습니까? 리소스를 JAR 파일의 루트에 두어 모든 디렉토리를 참조하지 않고 파일 이름 만 사용하도록해야합니다. 물론 Ant에서 JAR 파일을 생성하는 것을 제어해야합니다. – ramsinb

관련 문제