본문 바로가기
DEV/Java

[자바] Properties

by 어쩌다개발 2023. 2. 16.
반응형

Properties

Properties는 HashMap의 구버전인 Hashtable을 상속받아 구현한것으로 (String, String) 형태로 저장하는 단순화된 컬렉션클래스이다.

주로 애플리케이션의 환경설정과 관련된 속성(property)을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다. 그래서 간단한 입출력은 Properties를 활용하면 몇 줄의 코드로 쉽게 해결될 수 있다.

메서드 설명
Properties() Properties 객체를 생성
Properties(Properties defaults) 지정된 Properties에 저장된 목록을 가진 Properties 객체를 생성
String getProperty(String key) 지정된 키의 값을 반환
String getProperty(String key, String defaultValue) 지정된 키의 값을 반환. 키를 못찾으면 defaultValue를 반환.
void list(ProntStream out) 지정된 PrintStream에 저장된 목록을 출력.
void list(PrintWriter out) 지정된 PrintWriter에 저장된 목록을 출력.
void load(InputStream inStream) 지정된 InputStream으로부터 목록을 읽어서 저장
void load(Reader reader) 지정된 Reader로부터 목록을 읽어서 저장
void loadFormXML(InutStream in) 지정된 InputStream으로부터 XML 문서를 읽어서 XML 문서에 저장된 목록을 읽어다 담음(load&store)
Enumeration propertyNames() 목록의 모든 키가 담긴 Enumeration을 반환
void save(OutputStream out, STring header) deprecated되었으므로 store() 사용권장
Object setProperty(String key, String value) 지정된 키와 값을 저장. 이미 존재하는 키면 새로운 값으로 바뀜.
void store(OutputStream out, String comments) 저장된 목록을 지정된 OutputStream에 출력(저장). comments는 목록에 대한 설명(주석)으로 저장.
void store(Writer writer, String comments) 저장된 목록을 지정된 Writer에 출력(저장)함. comments는 목록에 대한 설명(주석)으로 저장.
void storeToXML(OutputStream os, STring comment) 저장된 목록을 지정된 출력스트림에 XML문서로 출력(저장)함. comment는 목록에 대한 설명(주석)으로 저장.
void storeToXML(OutputStream os, STring comment, String encoding) 저장된 목록을 지정된 출력스트림에 해당 인코딩의 XML문서로 출력(저장). comment는 목록에 대한 설명(주석)으로 저장
Set stringPropertyNames() Properties에 저장되어 있는 모든 키를 Set에 담아서 반환
import java.util.Enumeration;
import java.util.Properties;

public class PropertiesEx1 {
    public static void main(String[] args) {
        Properties prop = new Properties();

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

        //prop에 저장된 요소들을 Enumeration을 이용해 출력
        Enumeration e = prop.propertyNames();

        while (e.hasMoreElements()) {
            String element = (String) e.nextElement();
            System.out.println(element + "=" + prop.getProperty(element));
        }

        System.out.println("====================");
        prop.setProperty("size", "20");
        System.out.println("size=" + prop.getProperty("size"));
        System.out.println("capacity=" + prop.getProperty("capacity", "20"));
        System.out.println("loadfator=" + prop.getProperty("loadfactor", "0.75"));

        System.out.println("====================");

        System.out.println(prop); //prop에 저장된 요소들을 출력한다.

        System.out.println("======================");

        prop.list(System.out); //prop에 저장된 요소들을 화면(System.out)에 출력한다.
    }
}

실행결과

capacity=10
size=10
timeout=30
language=kr
====================
size=20
capacity=10
loadfator=0.75
====================
{size=20, language=kr, timeout=30, capacity=10}
======================
-- listing properties --
size=20
language=kr
timeout=30
capacity=10

getProperty()는 Properties에 저장된 값을 읽어오는 일을 하는데, 만일 읽어오려는 키가 존재하지 않으면 지정된 기본값(defaultValue)을 반환한다.

Properties는 Map의 특성상 저장순서를 유지하지 않기 때문에 결과에 출력된 순서와 저장순서는 무관하다.

Properties는 컬렉션프레임워크 이전의 구버전이므로 Iterator가 아닌 Enumeration을 사용한다. 그리고 list 메서드를 활용하여 Properties에 저장된 모든 데이터를 화면 또는 파일에 편리하게 출력할 수 있다.

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class PropertiesEx2 {
    public static void main(String[] args) {
        Properties prop = new Properties();

        prop.setProperty("timeout", "30");
        prop.setProperty("language", "한글");
        prop.setProperty("size", "10");
        prop.setProperty("capacity", "10");

        try {
            prop.store(new FileOutputStream("output.txt"), "Properties Example");
            prop.storeToXML(new FileOutputStream("output.xml"), "Properties Example");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

실행결과

#Properties Example
#Thu Feb 16 00:53:47 KST 2023
size=10
language=\uD55C\uAE00
timeout=30
capacity=10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Properties Example</comment>
<entry key="size">10</entry>
<entry key="language">한글</entry>
<entry key="timeout">30</entry>
<entry key="capacity">10</entry>
</properties>

Properties에 저장된 데이터를 store()와 storeToXML()을 이용해서 파일로 저장할 수 있다.

 

참고 자바의정석

반응형

'DEV > Java' 카테고리의 다른 글

[자바] 람다식(Lambda expression)  (1) 2023.02.22
[자바] 제네릭 와일드 카드  (9) 2023.02.16
[자바] HashMap  (3) 2023.02.15
[자바] HashSet  (7) 2023.02.15
[자바] Comparator 와 Comparable  (3) 2023.02.14

댓글