JAVA Properties 클래스 사용하기
<원본: http://www.okjsp.pe.kr/seq/38761>
java.util.Properties 클래스는 프로그램의 설정정보를 개발코드에 불러오거나 또는 설정정보에 새로운 정보를 추가, 저장 할 수 있다.
프로퍼티 파일은 일련의 키-값의 쌍들로 이루어지며 파일에 저장되며, 파일의 이름은 .properties로 끝난다.
예를 들어 다음의 2라인은 두개의 프로퍼티들을 가진 프로퍼티파일을 나타낸다. 첫번째 hello 프로퍼티는 world라는 값을 갖으며 두번째 goodbye라는 프로퍼티는 cruel world라는 값을 갖는다.
- hello=world
goodbye=cruel world
프로퍼티(Properties)클래스는 기본적으로 지속적인(persistent) 해시테이블을 제공하며 그곳에서 모든 키와 값들은 스트링형태이다.
- String value = (String)aPropertiesObject.get("hello");
System.out.println("Value of hello is: " + value);
getProperty(key) 메소드로 특정한 프로퍼티(키)에 대한 값을 요청할 수 있으며, 이 메소드는 스트링 객체를 반환한다.
setProperty 메소드는 해시테이블에서 상속받은 put메소드와 동일하게 작용하지만 그것은 매개변수로 두개의 스트링 타입을 받는다:setProperty(keyString, valueString).
프로퍼티 셋팅을 불러오는 것은 load 메소드를 통해 이루어진다. 단지 InputStream에 프로퍼티파일을 넣어서 그 스트림으로부터 프로퍼티들을 읽어온다.
load 메소드는 Reader객체가 아닌 InputStream객체를 받아들인다. 8859_1 문자인코딩은 클래스 정의에 하드 코딩되어 있기때문에 변경할 수 없다. 하지만 프로퍼티파일 안에 \uXXXX라는 상수를 넣으므로서 유니코드값을 기술할 수는 있다.
기본적인 불러오기 프로세스는 다음과 같이 진행된다.
- InputStream is = ...
Properties props = new Properties();
try {
props.load(is);
} - catch (IOException e) {
System.err.println("Load failed");
}
만약 웹 애플리케이션을 jar로 묶었다면 FileInputStream을 이용하는대신 InputStream은 JAR파일로부터 불러들여야 할 것이다. 그와 같은 경우 클래스 로더에게 그 스트림을 요청해야 하며 다음과 같다.
- InputStream is = this.getClass().getClassLoader().getResourceAsStream("foo.properties");
일단 그 프로퍼티 파일이 불러들여지면 getProperty메소드와 putProperty메소드를 사용할 수 있다.
어떠한 프로퍼티(키)들이 불러들여졌는지 확인하기 위해서는 list 메소드들 중의 하나를 사용할 수 있다.
OutputStream 또는 Writer객체에 프로퍼티파일을 불러들여서 프로퍼티들을 쓸 수 있다.
프로퍼티들을 업데이트하고 재저장하려 한다면 Properties 클래스는 store 메소드를 이용하면 된다.: store(OutputStreamstream, String string). 그 스트링은 프로퍼티파일의 첫번째 줄에 코멘트로 저장되어지며 파일의 내용이 무엇인지 알 수 있도록 한다.
- import java.util.Properties;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class Example01 {
public Example01() {
}
public static void main(String[] args) {
Properties properties = new Properties();
// Read properties file.
try {
properties.load(new FileInputStream("example01.properties"));
}- catch (IOException e) {
} - String avalue = properties.getProperty("a");
System.out.println(avalue);
properties.setProperty("a", "properties test"); - // Write properties file.
try {
properties.store(new FileOutputStream("example01.properties"), null);
} - catch(IOException e) {
}
} - }
위의 내용을 Example01.java로 저장하여 컴파일을 하고 실행하게 되면 어떤 결과가 나올까요?
한번 실행후 다시 실행해 보시기 바랍니다. 그리고 그 결과가 왜 그렇게 나오는지를 분석하시면
공부하는데 도움이 되시리라 봅니다.
참고로 재미있는 사실은 프로퍼티파일이 생성되는 위치입니다.
자바가상머신이 실행되는 디렉토리를 중심으로 프로퍼티파일이 생성되더군요.다른 소스에 있던 예제.
// 프로퍼티 파일로부터 클래스 이름을 가져온다
InputStream propertyFile = getClass().getClassLoader().
getResourceAsStream("nocontainer-agency.properties");
Properties properties = new Properties();
properties.load(propertyFile);
Class airlineAgencyClass = Class.forName
(properties.getProperty("airline-agency-class"));
'JAVA' 카테고리의 다른 글
StringTokenizer 예제 (0) | 2009.11.08 |
---|---|
자바 웹에서 파일 다운 받는 초간단 예제. (1) | 2009.09.25 |
자바 외부 명령어 실행하기. ProcessBuilder (0) | 2009.09.25 |