Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

Super Coding Addict

Ch14. 자바 입출력 (4) 본문

JAVA 문법

Ch14. 자바 입출력 (4)

밍응애 2021. 2. 18. 22:49

< 문자 단위 입출력 스트림 >

* FileReader와 FileWriter

- 파일의 문자를 읽고 쓸 때 가장 많이 사용하는 클래스

 

- 예제

# FileReader 클래스

reader.txt

--> 읽어올 텍스트 파일

--> 이것을 FileInputStream으로 읽게 되면?

package Ch14.stream.reader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileReaderTest {

	public static void main(String[] args) throws IOException {
		
		FileInputStream fis = new FileInputStream("reader.txt");
		int i;
		while ( (i = fis.read()) != -1) {
			System.out.print((char)i);
		}
		
		fis.close();

	}

}

--> 한글은 2바이트이므로 읽지 못하고 영어만 읽어온다

 

--> FileInputStream대신, FileReader로 읽어오면?

package Ch14.stream.reader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderTest {

	public static void main(String[] args) throws IOException {
		
		FileReader fis = new FileReader("reader.txt");
		int i;
		while ( (i = fis.read()) != -1) {
			System.out.print((char)i);
		}
		
		fis.close();

	}

}

--> 다음과 같이 한글도 잘 읽어오게 된다

 

--> 또는, FileInputStream으로 먼저 바이트를 읽은 다음, 보조스트림인 InputStreamReader로 이 스트림을 감싸주면 마찬가지로 한글도 잘 읽어올 수 있다

 

package Ch14.stream.reader;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;

public class FileReaderTest {

	public static void main(String[] args) throws IOException {
		
		//바이트 단위로 읽기
		FileInputStream fis = new FileInputStream("reader.txt");
		
		//보조스트림으로 감싸주기
		InputStreamReader isr = new InputStreamReader(fis);
		
		int i;
		while ( (i = isr.read()) != -1) {
			System.out.print((char)i);
		}
		
		isr.close();	//보조스트림을 close하면 원스트림까지 close됨

	}

}

--> 보조스트림인 InputStreamReader 생성자 인자로 FileInputStream 객체인 fis를 넣어주고, 읽을 땐 보조스트림인 isr로 읽고 닫는다 

--> 소켓에서 읽을 때는 무조건 바이트 단위로 읽게 되므로 이런 경우처럼 보조스트림의 도움을 받는다

--> FileOutputStream도 마찬가지로 바이트 단위로 쓴 후 OutputStremaWriter로 감쌀 수가 있다

 

#FileWriterTest 클래스

package Ch14.stream.writer;

import java.io.FileWriter;
import java.io.IOException;

public class FileWriterTest {

	public static void main(String[] args) throws IOException {
		
		FileWriter fw = new FileWriter("writer.txt");
		fw.write('A');

		char[] buf = {'B', 'C', 'D', 'E', 'F'};
		fw.write(buf);
		fw.write("안녕하쇼");
		fw.write(buf, 2, 2);
		fw.close();
		
		System.out.println("end");
	}
}

--> char, char[], String 타입 등으로 write() 가능

writer.txt

--> writer.txt파일에 write()가 잘 되었다

'JAVA 문법' 카테고리의 다른 글

Ch14. 자바 입출력(6)  (0) 2021.02.20
Ch14. 자바 입출력 (5)  (0) 2021.02.18
Ch14. 자바 입출력 (3)  (0) 2021.02.18
Ch14. 자바 입출력 (2)  (0) 2021.02.16
Ch14. 자바 입출력 (1)  (0) 2021.02.16