Dico

[Java] Class Properties

  • 민갤

Collection Framework

데이터 군을 저장하는 클래스들을 표준화한 설계

컬렉션 Collection :  다수의 데이터. 데이터 그룹

프레임웍 Framework :  표준화된 프로그래밍 방식.

Class Properties

Hashtable을 상속받아 구현한 컬렉션 클래스.

'(String, String)'의 형태로 저장한다.

주로 애플리케이션의 환경 설정과 관련된 속성(property)을 저장하는 데 사용한다.

데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다.

Public constructors

생성자설명
  Properties()  Properties 객체 생성
  Properties(Properties defaults)  지정된 Properties에 저장된 목록을 가진 Properties 객체 생성

Public methods

반환타입이름설명
  String  getProperty(String key, String defaultValue)  지정된 키의 값을 반환. 키를 못 찾으면 dafalutValue 반환
  String  getProperty(String key)  지정된 키의 값을 반환
  void  list(PrintStream out)  지정된 PrintStream에 저장된 목록 출력
  void  list(PrintWriter out)  지정된 PrintWriter에 저장된 목록 출력
  void  load(InputStream inStream)  지정된 InputStream으로부터 목록을 읽어서 저장
  void  load(Reader reader)  지정된 Reader로부터 목록을 읽어서 저장
  void  loadFromXML(InputStream in)  지정된 InputStream으로부터 XML문서를 읽어서, XML문서에 저장된 목록을 읽어서 담는다. (load&store)
  Enumeration<?>  propertyNames()  목록의 모든 키가 담긴 Enumeration을 반환
  void  save(OutputStream out, String comments)  deprecated되었으므로 store()를 사용하자
  Object  setProperty(String key, String value)  지정된 키와 값을 저장. 이미 존재하는 키면 새로운 값으로 변경
  void  store(OutputStream out, String comments)  저장된 목록을 지정된 out에 출력(저장).
  comments는 목록에 대한 주석으로 저장
  void  store(Writer writer, String comments)  저장된 목록을 지정된 writer에 출력(저장).
  comments는 목록에 대한 주석으로 저장
  void  storeToXML(OutputStream os, String comment, String encoding)   저장된 목록을 지정된 출력 스트림에 해당 인코딩의 XML 문서로 출력(저장). comment는 목록에 대한 주석으로 저장
  void  storeToXML(OutputStream os, String comment)  저장된 목록을 지정된 출력 스트림에 XML 문서로 출력(저장).
  comment는 목록에 대한 주석으로 저장
  Set  stringPropertyNames()  Properties에 저장되어 있는 모든 키를 Set에 담아서 반환

Example

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;
import java.util.Scanner;

public class Main {
    static File file = new File("C:\\work\\Test.properties"); // property File

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        String key = input.nextLine(); // name
        String value = input.nextLine(); // love

        writeProperty(key, value);
        readProperty(key);

        defaultExample();
        SystemProperty();
    }

    public static void writeProperty(String key, String value) {
        FileOutputStream fos = null;
        try {
            // Nonexistent File → Create
            if (!file.exists()) {
                file.createNewFile();
                print("Create New File"); // Create New File
            }

            fos = new FileOutputStream(file);

            // Save Property data
            Properties pr = new Properties();
            pr.setProperty(key, value);
            pr.store(fos, "Property Test");

            print("Write"); // Write
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void readProperty(String key) {
        if (!file.exists()) {
            print("Nonexistent File");
        }

        try {
            // Read Property Data
            Properties pr = new Properties();
            pr.load(new FileInputStream(file));
            String data = pr.getProperty(key, "does not exist");

            print(data); // love
            print("Read"); // Read
            print(pr + ""); // {name=love}
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void defaultExample() {
        Properties pr = new Properties();

        pr.setProperty("timeout", "30");
        pr.setProperty("language", "kr");
        pr.setProperty("size", "10");
        pr.setProperty("capacity", "10");

        Enumeration<?> e = pr.propertyNames();
        while (e.hasMoreElements()) {
            String element = (String) e.nextElement();
            print(element + " = " + pr.getProperty(element));
        }
        /*
         * capacity = 10 size = 10 timeout = 30 language = kr
         */

        pr.setProperty("size", "20");
        print("size = " + pr.getProperty("size")); // size = 20
        print("capacity = " + pr.getProperty("capacity", "0")); // capacity = 10
        print("loadFactor = " + pr.getProperty("loadFactor", "0.75")); // loadFactor = 0.75

        print(pr + ""); // {capacity=10, size=20, timeout=30, language=kr}
    }

    public static void SystemProperty() {
        Properties sysPr = System.getProperties();
        print("java.version : " + sysPr.getProperty("java.version")); // java.version : 1.8.0_131
        print("user.language : " + sysPr.getProperty("user.language")); // user.language : ko
    }

    public static void print(String str) {
        System.out.println(str);
    }
}
-- Test.properties --
#Property Test
#Fri Oct 20 23:50:51 KST 2017
name=love


Properties API

참고 서적: 자바의 정석 3판 2