HashMap
의 구버전인 Hashtable
을 상속받아 구현한 것Hashtable
: <키, 값> -> <Object, Object>Properties
: -> <String, String>
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) {
Properties p = new Properties();
// 추가 .. map.put(k, v)
p.setProperty("autosave", "5");
p.setProperty("language", "한글");
p.setProperty("timeout", "10");
System.out.println(p);
// 읽기 .. map.get(key)
System.out.println(p.getProperty("autosave"));
System.out.println(p.getProperty("autosave2", "-1")); //찾고 없으면 "-1"
System.out.println(p.getProperty("autosave2")); //찾고 없으면 "-1"
// 출력(스트림)
p.list(System.out);
// 파일로 저장, 읽기
try {
p.load(new FileInputStream("output.txt"));
System.out.println(p);
p.store(new FileOutputStream("output.txt"), "commmmmmment");
// p.store(new FileOutputStream("c:\\java\\output.text"), "주석"); //이처럼 경로 지정 가능
p.storeToXML(new FileOutputStream("output.xml"), "hangeul possible");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
->
{autosave=5, language=한글, timeout=10}
5
-1
null
-- listing properties --
autosave=5
language=한글
timeout=10
{autosave=5, language=한글, timeout=10}
한글 깨짐!
import java.util.Enumeration;
import java.util.Properties;
public class PropertiesEx1 {
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("timeout", "30");
p.setProperty("language", "kr");
p.setProperty("size", "10");
p.setProperty("capacity", "10");
// Enumeration을 이용해 출력
Enumeration e = p.propertyNames();
while(e.hasMoreElements()) {
String element = (String)e.nextElement();
System.out.println(element+"="+p.getProperty(element));
}
System.out.println();
p.setProperty("size", "20");
System.out.println("size = "+p.getProperty("size"));
System.out.println("capacity = "+p.getProperty("capacity", "20"));
System.out.println("loadfactor = "+p.getProperty("loadfactor", "0.75"));
System.out.println(p);
System.out.println();
p.list(System.out);
}
}
->
capacity=10
size=10
timeout=30
language=kr
size = 20
capacity = 10
loadfactor = 0.75
{size=20, language=kr, timeout=30, capacity=10}
-- listing properties --
size=20
language=kr
timeout=30
capacity=10
import java.io.FileInputStream;
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) {
// 외부파일(input.txt)로부터 데이터를 입력받아서 계산결과를 보여주는 예제
// 커맨드라인에서 inputfile을 지정해주지 않으면 프로그램을 종료한다.
if(args.length != 1) {
System.out.println("USAGE: java PropertiesEx2 INPUTFILENAME");
System.exit(0);
}
Properties prop = new Properties();
// 미리 파일 만듦...
prop.setProperty("name", "Seong Namkung");
prop.setProperty("data", "9,1,5,2,8,13,26,11,35,1");
System.out.println(prop);
String inputFile = args[0];
try {
prop.store(new FileOutputStream("input.txt"), "This is comment..");
prop.load(new FileInputStream(inputFile));
} catch (FileNotFoundException e) {
System.out.println("지정된 파일을 찾을 수 없습니다.");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
}
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;
int sum = 0;
for(int i=0; i<data.length; i++) {
int intValue = Integer.valueOf(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);
// System.out.println("평균 : "+(sum/(double)data.length));
}
}
->
{data=9,1,5,2,8,13,26,11,35,1, name=Seong Namkung}
이름 : Seong Namkung
최댓값 : 35
최솟값 : 1
합계 : 111
평균 : 11.1
import java.util.Properties;
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);
}
}
->
java version : 11.0.12
user.language : ko
-- listing properties --
sun.desktop=windows
awt.toolkit=sun.awt.windows.WToolkit
java.specification.version=11
sun.cpu.isalist=amd64
sun.jnu.encoding=MS949
java.class.path=C:\javaWorkspace\ch11\bin
java.vm.vendor=Oracle Corporation
sun.arch.data.model=64
user.variant=
java.vendor.url=https://openjdk.java.net/
user.timezone=
os.name=Windows 10
java.vm.specification.version=11
sun.java.launcher=SUN_STANDARD
user.country=KR
sun.boot.library.path=C:\Program Files\Java\jdk-11.0.12\bin
sun.java.command=PropertiesEx4
jdk.debug=release
sun.cpu.endian=little
user.home=C:\Users\sylee
user.language=ko
java.specification.vendor=Oracle Corporation
java.version.date=2021-07-20
java.home=C:\Program Files\Java\jdk-11.0.12
file.separator=\
java.vm.compressedOopsMode=Zero based
line.separator=
java.specification.name=Java Platform API Specification
java.vm.specification.vendor=Oracle Corporation
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
user.script=
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
java.runtime.version=11.0.12+8-LTS-237
user.name=sylee
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.version=18.9
java.vendor.url.bug=https://bugreport.java.com/bugreport/
java.io.tmpdir=C:\Users\sylee\AppData\Local\Temp\
java.version=11.0.12
user.dir=C:\javaWorkspace\ch11
os.arch=amd64
java.vm.specification.name=Java Virtual Machine Specification
java.awt.printerjob=sun.awt.windows.WPrinterJob
sun.os.patch.level=
java.library.path=C:\Program Files\Java\jdk-11.0.12\bin...
java.vendor=Oracle Corporation
java.vm.info=mixed mode
java.vm.version=11.0.12+8-LTS-237
sun.io.unicode.encoding=UnicodeLittle
java.class.version=55.0