ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Properties
    JAVA/IOStream 2021. 1. 11. 18:46

     

    우선 간단하게 입/출력 스트림에 대해 알아보자.

    자바 프로젝트를 하나 만드는데 이름은 Stream이라고 하자.

    그리고 src폴더에 stream 패키지를 하나 생성한다.

    stream 패키지에 StreamTest.java파일을 하나 생성한다.

     

    입력 스트림에 대해 알아보자.

    StreamTest.java

    package stream;
    
    /*
    	Out의 방향은 Java Application에서 Console 방향이다.
    	System.out.flush(); 문장이 없으면 콘솔 화면 창에 아무것도 출력되지 않는다.
    */
    public class StreamTest {
    	public static void main(String[] args) {
    		System.out.write(97);	//	버퍼에 97값(아스키 코드 값)이 담긴다. 
    		System.out.flush();		//	버퍼 밖으로 밀어내는 역할을 한다.
    	}
    }

    실행결과는 다음과 같다.

    위의 소스에서 System.out.flush(); 문장을 주석처리하고 실행하면 아래와 같다.

    즉, 출력되는 결과는 없다.

     

     

    그리고 현재의 프로젝트의 바로 하위에 파일을 하나 만드는데, data.txt 라고 이름을 짓는다.

    아래와 같이 파일명을 data.txt라고 적는다.

     

    data.txt 의 내용

    abcdef

     

    StreamTest.java

    더보기
    package stream;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class StreamTest 
    {
    	public static void main(String[] args) 
    	{
    			//	InputStream(입력 스트림)		
    			try { 
    				InputStream in = new FileInputStream( new File("data.txt") );	
    				byte r;	//	스트림은 byte 형태로 받아야 한다.
    				
    				try {
    					//	while 루프를 통해 r이 -1이 아닐 때까지 읽어들인다.
    					while ( ( r = (byte) in.read() ) != -1 )
    						System.out.print( (char)r );
    				} 
    				catch (IOException e) {	e.printStackTrace();	}
    			} 
    			catch (FileNotFoundException e) {e.printStackTrace();}
    	}
    }

    프로그램 실행결과

     

     

     

     

    그리고, 프로젝트 폴더의 바로 하위에 html파일을 하나 만드는데, index.html이라고 하자.

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	test
    </body>
    </html>

     

    StreamTest.java

    더보기
    package stream;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    
    public class StreamTest 
    {
    	public static void main(String[] args) 
    	{
    			//	InputStream(입력 스트림)		
    			try { 
    				InputStream in = new FileInputStream( new File("index.html") );
    				byte r;	//	스트림은 byte 형태로 받아야 한다.
    				
    				try {
    					//	while 루프를 통해 r이 -1이 아닐 때까지 읽어들인다.
    					while ( ( r = (byte) in.read() ) != -1 )
    						System.out.print( (char)r );
    				} 
    				catch (IOException e) {	e.printStackTrace();	}
    			} 
    			catch (FileNotFoundException e) {e.printStackTrace();}
    	}
    }

     

    실행결과는 아래와 같다.

     

     

     

     

     

     

    출력 스트림에 대해 알아보자.

    내용을 파일에 써보자.

    프로젝트의 하위에 data1.txt파일을 하나 만들자. 내용은 없다.

    StreamTest.java

    더보기
    package stream;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    public class StreamTest 
    {
    	public static void main(String[] args) 
    	{
    		//	OutputStream(출력 스트림)은 java 기준으로 out -> console(화면), file		
    		byte[] data = new byte[] { '1','2','3','4' };
    		
    		try {
    			//	data1.txt로 데이터를 내보낼 것이다.
    			OutputStream out = new FileOutputStream( new File("data1.txt") );
    			
    			for ( byte d : data )
    			{
    				try { out.write(d);}
    				catch (IOException e) {e.printStackTrace();}
    			}
    		} 
    		catch (FileNotFoundException e) {e.printStackTrace();}
    	}
    }

     

    실행하고나서, data1.txt파일로 이동해서 내용을 보자.

     

     

    이번에는 src폴더 바로 하위에 파일을 하나 생성하는데 이름은 config.properties라고 짓는다.

    위에서는 프로젝트의 바로 하위에 파일을 생성했으나, 여기서는 src폴더의 바로 하위에 만들어야 한다.

    config.properties 파일에 쓴 내용은 아래에서 해석해보자.

    config.properties

    index=spring.web.mvc.index.jsp
    insert=insert.jsp
    delete=delete.jsp
    update=update.jsp

     

    config.properties 파일에서 "=" 을 중심으로 왼쪽은 속성을 의미하고 오른쪽은 속성에 대한 값을 정의한 것이다.

     

    stream패키지에 Main.java 파일을 생성한다.

    Main.java

    더보기
    package stream;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    /* 
    	Properties클래스는 파싱해주는 클래스
    	config.properties 파일은 src가 루트 경로이다. 그래서 파일의 위치를 src밑에 둔다.	
    */
    public class Main {
    	public static void main(String[] args) {
    		String propertiesFilename = "config.properties";
    		Properties prop = loadProperties(propertiesFilename);
    		PrintProperties(prop);
    	}
    
    	private static void PrintProperties(Properties prop) 
    	{
    		//	stream을 통해 키와 키에 대한 값을 가지고 온다.
    		//	설정파일(config.properties)의 내용에서 =을 중심으로 좌측이 키값 우측이 키에 대한 속성값이다.
    		//	이 값을 분리해서 출력한다.
    		prop.stringPropertyNames().stream(
    				).map(key->key+"="+prop.getProperty(key)).forEach(System.out::println);
    		
    	}
    	
    	private static Properties loadProperties(String propertiesFilename) 
    	{
    		Properties prop = new Properties();	//	속성을 저장하는 클래스
    		
    		//	Properties클래스를 사용하려면 현재의 클래스를 로드해야 한다.
    		ClassLoader loader = Main.class.getClassLoader();	//	Main클래스를 로드한다.
    		
    		InputStream in = loader.getResourceAsStream(propertiesFilename);
    		
    		//try(in){}
    		//catch(Exception e) {e.printStackTrace();}
    		
    		if ( in == null )
    		{	
    			//	실패한 이유 처리 
    		}
    		
    		try {	prop.load(in);	} 
    		catch (IOException e) {e.printStackTrace();}
    		
    		return prop;
    	}
    }

     

    실행하면 다음과 같은 결과가 출력된다.

     

    위의 PrintProperties메소드에서 "="대신 ":"이라 적고 실행해보자. 즉, 메소드를 아래와 같이 변경하자.

     

    그러면 다음과 같은 결과를 얻는다.

     

    프로젝트에서의 파일과 폴더의 계층 구조는 다음과 같다.

    댓글

Designed by Tistory.