Properties
properties는 Hashtable을 상속받아 구현한 것으로, HashTable과 달리 키와 값을 (Object, Object)로 저장하지 않고 (String,String)으로 저장하는 보다 단순화된 컬렉션 클레스이다.
주로 어플리케이션의 환경설정과 관련된 속성(property)을 저장하는데 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공한다. 그래서 간단한 입출력은 Properties를 이용하면 몇 줄의 코드로 쉽게 해결될 수 있다.
메서드 | 설명 |
Properties() | Properties객체를 생성한다. |
Properties(Properties defaults) | 지정된 Properties에 저장된 목록을 가진 객체 생성 |
String getProperty(String key) String getProperty(String key, String defaultValue) |
지정된 키의 값을 반환 defaultValue를 지정하면 못찾을때 이 객체를 반환 |
void list(PrintStream out) void list(PrintWriter out) |
지정된 [PrintStream|PrintWriter]에 저장된 목록을 출력 |
void load(InputStream inStream) void load(Reader reader) |
지정된 [InputStream|Reader]으로 부터 목록을 읽어서 저장 |
void loadFromXML(InputStream 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) void store(Writer writer, String comments) |
저장된 목록을 지정된 [OutputStream|Writer]에 출력 comment는 목록에 대한 주석으로 지정된다. |
void storeToXML(OutputStream os, String comment) void storeToXML(OutputStream os, String comment, String encoding) |
저장된 목록을 지정된 출력스트림에 XML문서로 출력(저장)한다. 저장된 목록을 지정된 출력스트림에 해당 인코딩의 XML문서로 출력 comment는 주석 |
Set stringPropertyNames() | Propertyies에 저장되어 있는 모든 키를 Set에 담아서 반환한다. |
Properties 예제
import java.util.*;
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"));
System.out.println("loadfactor=" + prop.getProperty("loadfactor"));
System.out.println(prop); //prop에 저장된 요소들을 출력
prop.list(System.out); //prop에 저장된 요소들을 화면(System.out)에 출력
}
}
===========
실 행 결 과
===========
capacity=10
size=10
timeout=30
language=kr
size=20
capacity=10
loadfactor=null //default = 0.75
{size=20, language=kr, timeout=30, capacity=10}
-- listing properties --
size=20
language=kr
timeout=30
capacity=10
setProperty() - Properties에 데이터를 저장하는 메서드 / HashTable의 put메서드 호출, 기존에 같은 키가 있는 경우 그 값을 Object타입으로 반환, 그렇지 않으면 null반환
getProperty() - 저장된 값 읽어오는 메서드 / 읽어오려는 키가 없으면 지정된 기본값 반환
Properties는 HashTable을 상속받아 구현한 것이기 때문에 Map의 특성상 저장순서를 유지하지 않기 때문에 출력된 순서는 저장순서와 무관하다.
또, 컬렉션프레임웍 이전의 구버전이므로 Iterator가 아닌 Enumeration을 사용하고 list메서드를 이용하면 편하게 출력이 가능하다.
import java.io.*;
import java.util.*;
public class PropertiesEx2 {
public static void main(String[] args) {
//커맨드에서 파일을 지정해주지 않으면 종료한다.
if(args.length != 1){
System.out.println("ISAGE : java PropertiesEx2 INPUTFILENAMES");
System.exit(0);
}
Properties prop = new Properties();
String inputFile = args[0];
try{
prop.load(new FileInputStream(inputFile));
} catch (IOException e){
System.out.println("파일을 찾을 수 없습니다.");
System.exit(0);
}
String name = prop.getProperty("name");
/* 한글깨짐 오류시
try{
name = new String(name.getBytes("8859_1"), "EUC-KR");
}catch(Exception e){} */
String[] data = prop.getProperty("data").split(",");
int max=0, min = 0, sum=0;
for (int i = 0; i < data.length; i++) {
int intValue = Integer.parseInt(data[i]);
if(i==0) max = min = intValue;
if(max<intValue)
max=intValue;
else if(min>intValue)
min=intValue;
sum+=intValue;
}
System.out.println("이름 : " + name);
System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);
System.out.println("합계 : " + sum);
System.out.println("평균 : " + (sum*100.0/data.length/100));
}
}
8859_1 = 라틴 문자 집합
EUC-KR or KSC5601 = 한글완성형
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesEx3 {
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 (IOException e){
e.printStackTrace();
}
}
}
도스에서 한글 깨짐이 발생한다. XML은 한글편집이 가능하므로 한글이 포함돼있을 경우 store() 보다는 storeToXML()을 사용해 저장하는 것이 좋다
import java.util.*;
public class PropertiesEx4 {
public static void main(String[] args) {
Properties sysProp = System.getProperties();
System.out.println("java Version :" + sysProp.getProperty("java.version"));
System.out.println("user.language :" + sysProp.getProperty("user.language"));
sysProp.list(System.out);
}
}
실행결과 |
"C:\Program Files\Java\jdk-21\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2023.3.2\lib\idea_rt.jar=57686:C:\Program Files\JetBrains\IntelliJ IDEA 2023.3.2\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\workspace\Exam\untitled\out\production\untitled PropertiesEx4 java Version :21.0.1 user.language :ko -- listing properties -- java.specification.version=21 sun.cpu.isalist=amd64 sun.jnu.encoding=MS949 java.class.path=C:\workspace\Exam\untitled\out\produc... java.vm.vendor=Oracle Corporation sun.arch.data.model=64 user.variant= java.vendor.url=https://java.oracle.com/ java.vm.specification.version=21 os.name=Windows 10 sun.java.launcher=SUN_STANDARD user.country=KR sun.boot.library.path=C:\Program Files\Java\jdk-21\bin sun.java.command=PropertiesEx4 jdk.debug=release sun.cpu.endian=little user.home=C:\Users\user user.language=ko sun.stderr.encoding=UTF-8 java.specification.vendor=Oracle Corporation java.version.date=2023-10-17 java.home=C:\Program Files\Java\jdk-21 file.separator=\ java.vm.compressedOopsMode=Zero based sun.stdout.encoding=UTF-8 line.separator= java.vhttp://m.specification.vendor=Oracle Corporation java.specification.name=Java Platform API Specification user.script= sun.management.compiler=HotSpot 64-Bit Tiered Compilers java.runtime.version=21.0.1+12-LTS-29 user.name=user stdout.encoding=UTF-8 path.separator=; os.version=10.0 java.runtime.name=Java(TM) SE Runtime Environment file.encoding=UTF-8 java.vm.name=Java HotSpot(TM) 64-Bit Server VM java.vendor.url.bug=https://bugreport.java.com/bugreport/ java.io.tmpdir=C:\Users\user\AppData\Local\Temp\ java.version=21.0.1 user.dir=C:\workspace\Exam\untitled os.arch=amd64 java.vhttp://m.specification.name=Java Virtual Machine Specification sun.os.patch.level= native.encoding=MS949 java.library.path=C:\Program Files\Java\jdk-21\bin;C:\W... java.vm.info=mixed mode, sharing stderr.encoding=UTF-8 java.vendor=Oracle Corporation java.vm.version=21.0.1+12-LTS-29 sun.io.unicode.encoding=UnicodeLittle java.class.version=65.0 Process finished with exit code 0 |
'Java' 카테고리의 다른 글
[Java 기초 공부] 컬렉션 클래스 정리 & 요약 (0) | 2024.03.13 |
---|---|
[Java 기초 공부] 컬렉션 프레임웍 인터페이스 - 6 (0) | 2024.03.13 |
[Java 기초 공부] 해싱과 해싱함수 (1) | 2024.03.13 |
[Java 기초 공부] 컬렉션 프레임웍 인터페이스 - 4 (Map) (0) | 2024.03.13 |
[Java 기초 공부] 컬렉션 프레임웍 인터페이스 - 3 (Set) (0) | 2024.03.13 |