~전편에 이어서 2~

오늘은 Stream으로 파일 쓰기!

 

 1. 8bit Stream 활용 

- 전 편에서 사용했던 java_test.txt 파일을 읽어서 새로운 파일을 써보자

- test라는 글자가 적혀있음

- FileInputStream과 FileOutputStream을 사용하면 됨

- 파일 복사도 1byte씩 읽어들인 것을 다른 파일에 flush하면서 진행됨 

  >> byte의 array를 만들어서 1byte가 아니라 더 많은 byte를 읽어들이면 파일 복사 효율 증대

 

# 코딩 #

- 이전에 만들었던 클래스에서 이어서 method 작성!

	/**
	 * 8bit Stream 사용하여 text 파일 쓰기
	 * 
	 * @throws IOException
	 */
	public void usestream3() throws IOException {
		File inFile = new File("C:/Users/user/Desktop/java_test.txt"); // 읽어올 파일
		File outFile = new File("C:/Users/user/Desktop/java_output_test.txt"); // 작성할 파일

		FileInputStream fis = new FileInputStream(inFile); // 파일에 스트림 연결
		FileOutputStream fos = new FileOutputStream(outFile); // 파일에 스트림 연결

		int val = 0;
		while ((val = fis.read()) != -1) { // 읽어들일 데이터가 없을 때까지 while 실행
			fos.write(val); 읽어들인 데이터를 val에 넣고 새 파일에 write
		}
		fis.close(); // 스트림 닫자!
		fos.close();

	}// usestream3

 

# 출력 결과 #

새로운 파일이 복사되었고 test 문장이 잘 나왔다!

복사된 파일
출력 결과창

 


 

2. 16bit Stream 활용

- 이번에는 한글을 작성해보자

- 한글은 16bit Stream 이용해야함!

- Java에서 기본형 데이터형의 경우에는 flush()를 하지 않더라도 Stream에 있는 데이터가 HDD로 나가지만, 

  다른 데이터의 경우에는 꼭 flush()를 해주어야 함!!

 

# 코딩 #

	/**
	 * 16bit Stream 사용하여 text 파일 쓰기
	 * 
	 * @throws IOException
	 */
	public void usestream4() throws IOException {
		File file = new File("C:/Users/user/Desktop/java_output_test2.txt"); // 생성할 파일

		BufferedWriter bw = new BufferedWriter(new FileWriter(file));

		bw.write("안녕하세요");
		bw.flush(); // 데이터 내보내기
		bw.close(); // 스트림 닫자

	}// usestream4

# 출력 결과 #

한글도 데이터 내보내기 완료!

새로 생긴 파일
출력 결과창

 

~전편에 이어서~

오늘은 Stream을 활용하여 파일을 읽어보자!

 

1. 8bit Stream 활용

영어, 숫자는 1byte이므로 읽혀 지지만, 한글은 2byte 이므로 읽혀 지지 않음

- 방법)

① File에 연결할 수 있는 Stream을 생성

    FileInputStream fis = new FileInputStream(new File(“파일경로”)); //FileNotFoundException 

② 스트림에서 내용 읽기 

     > 스트림에 연결된 파일의 내용을 1byte씩 읽어 들임

     > 읽어들인 데이터가 존재하지 않으면 -1이 나옴.

     > IOException 처리 필요

           int value = 0;

           while ( (value = fis.read()) != -1 ) { // 파일 내용의 크기가 얼마나 될지 모르니 while사용

                    value 사용 }; 

 

# 코딩 # 

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;

public class UseStream {

	/**
	 * 8bit Stream 사용하여 text 파일 읽기
	 * @throws IOException
	 */
	public void usestream1() throws IOException {
		FileInputStream fis = new FileInputStream(new File("C:/Users/user/Desktop/tistory/java_test.txt")); // 파일에 스트림 연결
		
		int val = 0; // 스트림에 연결된 파일의 내용을 1byte씩 읽어 들이며 반환형이 int
		
		while ((val = fis.read()) != -1) { // 읽어들인 데이터가 존재하지 않으면 -1이 나옴 -> 데이터가 있을 때까지 읽어들임
			System.out.print((char) val);
		} // end while

		fis.close(); // stream 닫기!

	}// usestream1

- UseStream이라는 Class를 생성한 후 8bit Stream을 사용할 method를 작성했다!

- main method에서 클래스 객체 생성 후 method를 실행하면 아래와 같이 결과가 나온다.

- throws한 IOException은 method수행 시 try~catch로 처리했고,

  경로에 있는 java_test.txt는 'test'라는 영문 글자를 가지고 있당

 

# 출력 결과 #

test


 

2. 16bit Stream 활용

- 16bit Stream은 문자열을 입력받기 위해 고안된 Stream으로

  FileReader(HDD 파일과 연결) BufferedReader(스트림에서 연결된 파일에서 줄 단위로 읽음)를 사용하면 편함

  >> 연결된 파일을 줄 단위로 읽을 수 있음 (readLine())

- 방법)

① File에 연결할 수 있는 Stream을 생성

    FileReader fr = new FileReader(new File(“파일경로”));

② 부족한 기능을 제공하는 스트림 연결 (줄 단위로 읽어들이는 기능)

           BufferedReader br = new BufferedReader( fr );

③ 스트림에서 내용 읽기

       > 스트림에 연결된 파일의 내용을 줄 단위로 읽어 들임

       > 읽어들인 데이터가 존재하지 않으면 null이 나옴.

           String value = “”;

           while ( (value = br.readLine()) != null ) { // 줄 단위로 읽어서 저장하고 읽어들인 줄이 없으면 null이 반환됨

                    value 사용 } ;

 

# 코딩 # 

	/**
	 * 16bit Stream 사용하여 text 파일 읽기
	 * 한글은 16bit Stream으로 해야 깨지지 않음
	 * @throws IOException
	 */
	public void usestream2() throws IOException {
		FileReader fr = new FileReader(new File("C:/Users/user/Desktop/tistory/java_test1.txt"));
		BufferedReader br = new BufferedReader(fr); // BufferedReadr로 line을 읽어들이자. 속도향상! 

		String val = ""; // readLine method의 반환형은 String

		while ((val = br.readLine()) != null) { // 읽어들일 데이터가 없다면 null이 나옴
			System.out.print(val);
		} // end while
		
		br.close(); // 스트림 닫자!
	}// usestream2

- 이번 경로에 있는 java_test1의 내용은 한글이며 출력이 잘 읽히는 것을 확인할 수 있다!

 

# 출력 결과 #

안녕하십니까!반갑습니다.

 

 

 

 

+ Recent posts