2011-03-25 4 views
2

.properties 파일을 읽는 두 가지 방법을 알고 있습니다.자바에서 속성 파일을 읽는 가장 좋은 방법은 무엇입니까?

1- System.getProperties.load (.properties 파일의 Inputstream);

2 새 Properties 개체를 만든 다음 load (.properties 파일의 경우 Inputstream)를 호출합니다.

첫 번째 방법은 .properties 파일 값을 System 개체에 저장하는 것입니까? 더 많은 자원을 활용하고 있습니까?

가장 좋은 방법은 위의 두 가지 방법을 제외하고는 다른 방법이 있다면 알려 주시기 바랍니다.

감사합니다.

답변

9

속성 파일이 나타내는 내용에 따라 다릅니다. 이것이 디폴트 시스템 프로퍼티의 일부를 오버라이드/공급해야하는 시스템 프로퍼티를 나타내는 경우는, 최초의 방법으로 진행합니다. 그러나 응용 프로그램 별 속성 (보통보다 일반적인 경우)을 나타내는 경우 두 번째 방법을 사용하십시오.

+0

은 완전히 동의합니다. 시스템 속성은 분명히 시스템과 관련이 있으며 그 밖의 것은 응용 프로그램과 관련이 있습니다. 후자는 Apache Configuration 프로젝트 http://commons.apache.org/configuration/howto_properties.html과 같은 것으로 에코되는 Application Configuration으로 요약됩니다. 다른 종류의 속성 또는 ResourceBundle 로딩은 아직까지 후자와 함께있는 국제화를위한 것입니다. – hisdrewness

0

IMO, 시스템 속성 개체에 응용 프로그램 속성을로드하는 것은 좋지 않습니다. 로드하는 파일에 누군가 가짜 값을 넣으면 모든 종류의 모호한 오류가 발생할 수 있습니다. 예를 들어 "java.home"을 위조 된 값으로 설정하면 JavaMail이 실패하게되고 "* .separator"속성 중 하나를 설정하면 모든 종류의 물건이 이상하게 작동 할 수 있습니다. 다음과 같이이 다음 단지 속성을로드하지 않는 경우

Properties props = new Properties(System.getProperties()); 
    props.load(someInputStream); 

: 응용 프로그램이 정말에 "오버레이"시스템 등록 정보를 필요로하는 경우

, 다음은이 작업을 수행하는 것이 좋습니다 것

Properties props = new Properties(); 
    props.load(someInputStream); 

시스템 속성 개체 자체에서 값을 재정의해야하는 경우에는 신중하게/선택적으로해야합니다.

0

우리는 URL을 사용하여 등록 정보 파일을 읽 ...

Properties props = new Properties(); 
try 
{ 
    java.net.URL url = Thread.currentThread().getContextClassLoader().getResource(fileName); 
    java.net.URL url2 = ClassLoader.getSystemResource(fileName); 
    props.load(url.openStream()); 
} 
catch (FileNotFoundException e) 
{ 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
catch (IOException e) 
{ 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
return props; 
관련 문제