반응형

<원본: http://www.okjsp.pe.kr/seq/38761>

 

java.util.Properties 클래스는 프로그램의 설정정보를 개발코드에 불러오거나 또는 설정정보에 새로운 정보를 추가, 저장 할 수 있다.

프로퍼티 파일은 일련의 키-값의 쌍들로 이루어지며 파일에 저장되며, 파일의 이름은 .properties로 끝난다.

예를 들어 다음의 2라인은 두개의 프로퍼티들을 가진 프로퍼티파일을 나타낸다. 첫번째 hello 프로퍼티는 world라는 값을 갖으며 두번째 goodbye라는 프로퍼티는 cruel world라는 값을 갖는다.

 

  1. hello=world
    goodbye=cruel world

 

프로퍼티(Properties)클래스는 기본적으로 지속적인(persistent) 해시테이블을 제공하며 그곳에서 모든 키와 값들은 스트링형태이다.

 

  1. 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라는 상수를 넣으므로서 유니코드값을 기술할 수는 있다.

기본적인 불러오기 프로세스는 다음과 같이 진행된다.

 

  1. InputStream is = ...
    Properties props = new Properties();
    try {
      props.load(is);
    }
  2. catch (IOException e) {
      System.err.println("Load failed");
    }

 

만약 웹 애플리케이션을 jar로 묶었다면 FileInputStream을 이용하는대신 InputStream은 JAR파일로부터 불러들여야 할 것이다. 그와 같은 경우 클래스 로더에게 그 스트림을 요청해야 하며 다음과 같다.

 

  1. InputStream is = this.getClass().getClassLoader().getResourceAsStream("foo.properties");

 

일단 그 프로퍼티 파일이 불러들여지면 getProperty메소드와 putProperty메소드를 사용할 수 있다.

 

어떠한 프로퍼티(키)들이 불러들여졌는지 확인하기 위해서는 list 메소드들 중의 하나를 사용할 수 있다.

 

OutputStream 또는 Writer객체에 프로퍼티파일을 불러들여서 프로퍼티들을 쓸 수 있다.

 

프로퍼티들을 업데이트하고 재저장하려 한다면 Properties 클래스는 store 메소드를 이용하면 된다.: store(OutputStreamstream, String string). 그 스트링은 프로퍼티파일의 첫번째 줄에 코멘트로 저장되어지며 파일의 내용이 무엇인지 알 수 있도록 한다.

 

  1. import java.util.Properties;
  2. import java.io.FileInputStream;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5.  
  6. public class Example01 {
      public Example01() {
      }

  7.   public static void main(String[] args) {
        Properties properties = new Properties();
        // Read properties file.
        try {
          properties.load(new FileInputStream("example01.properties"));
        }
  8.     catch (IOException e) {
        }
  9.     String avalue = properties.getProperty("a");
        System.out.println(avalue);
        properties.setProperty("a", "properties test");
  10.     // Write properties file.
        try {
          properties.store(new FileOutputStream("example01.properties"), null);
        }
  11.     catch(IOException e) {
        }
      }
  12. }




위의 내용을 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"));

반응형
Posted by Real_G