12_✨Properties

charl hi·2022년 6월 22일
0

자바의정석2

목록 보기
12/13

Properties

  • HashMap의 구버전인 Hashtable을 상속받아 구현한 것
  • Hashtable : <키, 값> -> <Object, Object>
  • Properties : -> <String, String>
  • 애플리케이션의 환경설정과 관련된 속성(property)을 저장하는 데 사용
  • 예) 자동저장, 자동로그아웃..
  • 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공

PropertiesTest

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}

한글 깨짐!



PropertiesEx1

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


PropertiesEx2

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


PropertiesEx4

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

0개의 댓글