예전에 시스템 프로퍼티 전부 출력해보고.. 그때 awt 분석하다가..os 종속적인 부분들에 대해 프로퍼티로

값을 읽어오는걸 봐서..


java.util.properties 는 내 예상보다 우월한 클래스였다.

테스트 고고 

아.. 그나저나 컨테이너간의 형 변환이 아주 쉽다. 프로퍼티는 해쉬셋 형태인데.. 요걸 list구조에
쉽게 넣을수 있다. addAll() 메서드 대박!

java.util.concurrent 요 패키지 어제 살짝 훑어봣는데.. 대박임 (스레드 관련해서)

load(Reader) / store(Writer, String) 메소드는, 문자 베이스의 스트림에 대한 프로퍼티의 로드와 포함을, 후술 하는 단순한 행 지향 형식에서 실시합니다. load(InputStream) / store(OutputStream, String) 메소드는 load(Reader) /store(Writer, String) 페어와 같이 동작합니다만, 입력/출력 스트림이 ISO 8859-1 문자 인코딩으로 encode 되는 점만은 다릅니다. 이 인코딩으로 직접 표현할 수 없는 문자는,Unicode 이스케이프를 사용해 기술할 수 있습니다. escape sequence로 사용할 수 있는 것은, 단일의 문자 'u' 뿐입니다. native2ascii 툴을 사용하면(자), 프로퍼티 파일을 다른 문자 인코딩으로 변환하거나 그 역을 실행할 수 있습니다.

loadFromXML(InputStream) 및 storeToXML(OutputStream, String, String) 메소드는, 프로퍼티을 단순한 XML 형식으로서 로드 및 포함할 수 있습니다. 디폴트에서는 UTF-8 문자 인코딩이 사용됩니다만, 필요에 따라서 인코딩을 지정할 수 있습니다. XML 프로퍼티 문서에서는, 다음의 DOCTYPE 선언이 사용됩니다.

<! DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
프로퍼티을 export/임포트 할 경우에, 시스템 URI (http://java.sun.com/dtd/properties.dtd)에는 액세스 하지 않습니다. 시스템 URI 는, DTD 를 일의에 식별하는 캐릭터 라인으로서 사용됩니다. 그 내용은 다음과 같습니다.
<? xml version="1.0" encoding="UTF-8"? ><! -- DTD for properties --><! ELEMENT properties ( comment?, entry* ) ><! ATTLIST properties version CDATA #FIXED "1.0"><! ELEMENT comment (#PCDATA) ><! ELEMENT entry (#PCDATA) ><! ATTLIST entry key CDATA #REQUIRED>


음.. 사용하기 엄청 간단함..
package properties;
import java.io.*;
import java.util.*;
public class main
public static void main(String[] args) 
{  
// TODO Auto-generated method stub  
//properties를 통한 xml 파일 저장,로드    
//로드 테스트  
Properties pro2 = new Properties();  
try  {   pro2.loadFromXML(new FileInputStream("park.xml"));  }  
catch (InvalidPropertiesFormatException e1)  
{   // TODO Auto-generated catch block   e1.printStackTrace();  }  
catch (FileNotFoundException e1)  
{   // TODO Auto-generated catch block   e1.printStackTrace();  }  
catch (IOException e1)  {   // TODO Auto-generated catch block   e1.printStackTrace();  }    

//테스트용 출력     
Iterator<Object> it = pro2.keySet().iterator();  
System.out.println("로드 테스트 출력");     
while(it.hasNext())     {      System.out.println(it.next());     }       

Properties pro = new Properties();  
pro.put("1", "장호1");  
pro.put("2", "장호2");  
pro.put("3", "장호3");  
pro.put("4", "장호4");  
pro.put("5", "장호5");    

try  {   pro.storeToXML(new FileOutputStream("park.xml"),"a");  }  
catch (FileNotFoundException e)  {   // TODO Auto-generated catch block   e.printStackTrace();  }  
catch (IOException e)  {   // TODO Auto-generated catch block   e.printStackTrace();  }      
}}


'자바se api > util' 카테고리의 다른 글

set,map,properties (2013/12/04)  (0) 2014.01.01
by givingsheart 2014. 1. 1. 16:29

내 툴의 구성은

1.Db커넥션 정보 입력

2.Db 사용 쿼리 선택

 

을 입력받아서 1의 정보 문자열 , 2의 선택정보를 static 쿼리 문자열 테이블에서 꺼내와서 두개를 txt나 xml로

만들어 주는 것이었다.

 

문제점이

a.DbConfigInfo 클래스는  b.DbConnectionInfo클래스 , c.DbQueryInfo클래스를 포함 시키는 Composition 관계로서

 

내 경우에 b,c의 멤버 필드로 String[] 와 enum InfoIndex{DBCON_DRIVER,DBCON_URL,DBCON_LOGIN_ID,...}

처럼 구성했었다. (추후에 조금 더 발전 시킨게.. ArrayList<String> 이엇음;;;)

 

map 자료구조를 나는 까먹었던 것이다!!!! bean 코드를 보면서 property(name , value) 를 그토록 봤었고.. 게다가

예전에 System.property를 전부 출력해봤는데.. 나는 property 데이터 타입의 유용성및 확장성에 대해 깊이있게

생각을 안했었다. (데이터와 코드를 분리한다!, 추가 기능의 탑재를 손쉽게 한다!)

 

유용한 데이터 타입을 팽개치고 string[] 과 인덱스 테이블을 사용하려하고 그땜에 기술적인 문제로 고민하다니;;

 

 

현재 property , xml에 관해서 정보를 찾아보다 spring 프레임 워크에서 저렇게 외부 데이터를 사용한다는

사실을 뒤늦게 깨닫고.. 조금 더 파고 들다가

 

java.sql.DriverManager

java.sql.Driver

java.sql.PreparedStatement (jsp 교재에서 접근하게된 데이터 타입으로 sql 쿼리 수행과 결과 얻기를 상당히 편하게 해준다)

java.util.properties

java.util.ServiceLoader를 파고 들게 되었다.

 

java.net 패키지도 훑어볼것!! (java.net.URL 클래스의 역할과 의미)

 

private static ServiceLoader<CodecSet> codecSetLoader = ServeiceLoader.load(CodecSet.class)

 

CodecSet.class 어디서 많이 본 문법(reflection) 아닌가? 내가 정의한 서비스(클래스묶음)를 저장해뒀다가 불러오는것

아닌가.. 조금 더 파야할듯 한다.  

 

추가로 annotation 또한 빨리 익혀야한다.

 

http://blog.naver.com/dalbong97?Redirect=Log&logNo=130164171144

 

 

********************************************

property의 경운 string string 으로 key, value를 저장하는 형식이고

map의 경운 string Object(모든 클래스 정보) 식으로 key, value를 저장하는 느낌같다. 아직 명확친 않다.

(빈객체를 xml을 이용해 세팅및 생성한다라..)

 

http://blog.naver.com/agapeuni?Redirect=Log&logNo=60090465973 완전히 이해할것!!!!!!!

 

java.net.URL 클래스의 유용성

http://cafe.daum.net/fordeveloper2/DMsp/59?q=java.net.URL&re=1

 

(ex)

 

---------------  
예제1  
---------------  
import java.io.*;  
import java.net.*;  

class URLInfoTest{  
public static void main(String[] args) throws Exception {  
try{  
//URL aURL = new URL("http://www.oraclejava.co.kr");  
URL aURL = new URL("http", "www.oraclejava.co.kr", 80 , "/index.jsp");  
System.out.println("protocol name:" + aURL.getProtocol());  
System.out.println("host name:" + aURL.getHost());  
System.out.println("file name:" + aURL.getFile());  
//생성자에서 port가 set되는 경우에 표시, 아니면 -1  
System.out.println("port name:" + aURL.getPort());  
//HTML 문서 내부의 위치를 지정하는 <a name="..."> 태그의 값을 구한다.  
System.out.println("ref : "+aURL.getRef());  
BufferedReader br  = new BufferedReader(new InputStreamReader(aURL.openStream()));  <- 주목할것!

 

/*

고민을 해보자. 어째서 BufferedReader가 생성자의 매개변수로 InputStreamReader를 받을 수 있는지를!

BufferedReader, InputStreamReader는 java.io.Reader 의 파생 클래스이다.

 

BufferedReader, InputStreamReader 둘다 java.io.Reader 타입의 in 이란 멤버 필드를 갖고 있다. 생성자에서 받게 되는

매개변수의 타입이 java.io.Reader 타입이다.

 

그럼으로 다형성을 이용해 Reader형 필드에 InputStreamReader를 보관할 수 있다. 인터페이스 메서드 read,fill 등에선

실제론 in.read() , in.fill() 등으로 연산을 한다.

 

다른 객체의 메서드를 상속 계층 트리의 다형성을 이용해 내가 사용해서 내 연산을 확장한다!  이것이 데코레이터 패턴이다.

 

URL 객체의 설계역시.. 입,출력 작업을 지원하기 위해 openStream이란 인터페이스를 제공한다. 이것을 자바io의 인풋 스트림 객체가 받고, 또 이것을 입출력 효율을 위해 버퍼드 리더 객체가 받는다..  얼마나 멋진가?

 URL 클래스의 openStream() 메서드이다.

public final InputStream openStream() throws java.io.IOException 
{
<div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">}</div><p> </p><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><pre style="margin: 0px; display: inline;">public URLConnection openConnection() throws java.io.IOException </pre></div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><pre style="margin: 0px; display: inline;">{</pre></div><div class="line" id="line-969" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><div class="lnml" id="lnml-969" style="display: inline;"></div><div class="lnmr" id="lnmr-969" style="display: inline;"></div><pre style="margin: 0px; display: inline;"> return .openConnection(this);</pre><div class="lnml" id="lnml-970" style="display: inline;"></div><div class="lnmr" id="lnmr-970" style="display: inline;"></div><pre style="margin: 0px; display: inline;">    </pre></div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"><pre style="margin: 0px; display: inline;"> }</pre></div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"> </div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">URL 클래스의 멤버 필드</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">transient URLStreamHandler handler;</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;"> </div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">아래는 URLStreamHandler 클래스가 사용하는 타 패키지의 클래스</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">(In/Out Stream을 주목!)</div><div class="line" style="font:/normal 'Lucida Grande', Tahoma, Verdana, Arial, Helvetica, sans-serif; color: rgb(0, 0, 0); text-transform: none; text-indent: 0px; letter-spacing: normal; padding-left: 10px; margin-top: -2px; word-spacing: 0px; white-space: normal; background-color: rgb(255, 255, 255); -webkit-text-stroke-width: 0px;">
 package java.net;
 
 import java.io.File;
 
 public abstract class URLStreamHandler 

</div>

*/


String line;  
while((line = br.readLine()) != null) {  
System.out.println(line);  
}  
}  
catch(MalformedURLException e) {  
System.out.println("MalformedURLException : "+e);  
}  
catch(IOException e) {  
System.out.println("IOException :"+ e);  
}  
}  
}  



-----------------  
예제2  
-----------------  
import java.io.*;  
import java.net.*;  

class URLInfoTest2{  
public static void main(String[] args) throws Exception {  
try{  
int ch;  
URL aURL = new URL("http", "www.oraclejava.co.kr", 80 , "/test.html");  
Class[] classes = {Reader.class, InputStream.class};  
Object content = aURL.getContent(classes);  
System.out.println(content + "\n");  
while((ch=((InputStream)content).read()) != -1) {  
               System.out.print((char) ch);  
            }  
System.out.println("--------------------------------");  
InputStream is = aURL.openStream();              
            while((ch=is.read()) != -1) {  
               System.out.print((char) ch);  
            }  
}  
catch(MalformedURLException e) {  
System.out.println("MalformedURLException : "+e);  
}  
catch(IOException e) {  
System.out.println("IOException :"+ e);  
}  
}  
}  


--------------------  
예제3  
--------------------  
import java.io.*;  
import java.net.*;  
public class PageReadTest{  
  public static void main(String[] args) throws Exception   {  
      if(args.length<1)  
        System.out.println("usage: java PageReadTest http://www.oraclejava.co.kr");  
    URL location = new URL(args[0].toString());  
      BufferedReader in = new BufferedReader  
       (new InputStreamReader(location.openStream()));  
String readLine;  
       while ((readLine = in.readLine()) != null)  
    System.out.println(readLine);  
     in.close();  
  }  
}  

by givingsheart 2014. 1. 1. 15:41
| 1 |