-
PropertiesJAVA/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메소드에서 "="대신 ":"이라 적고 실행해보자. 즉, 메소드를 아래와 같이 변경하자.
그러면 다음과 같은 결과를 얻는다.
프로젝트에서의 파일과 폴더의 계층 구조는 다음과 같다.
'JAVA > IOStream' 카테고리의 다른 글
BufferedReader를 이용한 문자 입력받기 (0) 2020.10.12 BufferedReader, PrintWriter를 이용한 파일 읽고 쓰기 (0) 2020.10.12 LineNumberReader를 이용한 문자 입력받기 (0) 2020.10.12 FileOutputStream,DataOutputStream,FileInputStream,DataInputStream (0) 2020.10.07 FileWriter & FileReader를 이용한 출력과 파일 복사 하기 (0) 2020.10.06