Languages/Java

[JAVA] 입출력 스트림/파일 입출력/FileReader/FileWriter

환테크 2021. 4. 23. 18:34
반응형

 

 

 

 

스트림

 

스트림 입출력

 버퍼를 가지고 순차적으로 이루어지는 입출력

 

자바의 입출력 스트림

 

응용 프로그램과 입출력 장치를 연결하는 소프트웨어 모듈

입력 스트림 : 입력 장치로부터 자바 프로그램으로

출력 스트림 : 출력 장치로 데이터 출력

 

자바의 입출력 스트림 특징

 

스트림의 양끝에 입출력장치와 자바 응용프로그램

 

스트림은 단방향

 입력과 출력을 동시에 하는 스트림은 없음

입출력 스트림 기본 단위

 바이트 스트림의 경우 : 바이트

 문자 스트림의 경우 : 문자(자바에서는 문자1개 : 2바이트)

선입선출 구조(FIFO구조)

스트림은 연결될 수 있다.

 

자바의 입출력 스트림 종류

 

바이트 스트림과 문자 스트림

 

바이트 스트림

 입출력되는 데이터를 단순 바이트로 처리

 ex)바이너리 파일을 읽는 입력 스트림

문자 스트림

 문자만 입출력하는 스트림

 문자가 아닌 바이너리 데이터는 스트림에서 처리 하지 못한다

 ex)텍스트 파일을 읽는 입력 스트림

JDK는 입출력 스트림을 구현한 다양한 클래스 제공

 

 

 

문자 스트림

 

유니 코드(2바이트)문자를 입출력 하는 스트림

 문자로 표현되지 않는 데이터는 다루지 못함

 이미지,동영상과 같은 바이너리 데이터는 입출력

 

문자 스트림을 다루는 클래스

 Reader/Writer

InputStreamReader/OutputStreamWriter

FileReader/FileWriter

BufferedReader/BufferdWriter

 텍스트 파일에서 문자 데이터 입출력

 

 

 

문자 중심의 입출력 클래스

 

클래스 Reader와 Writer

 문자 중심의 입출력을 담당하는 추상 클래스

클래스 Reader의 주요 메소드

클래스 Writer의 주요 메소드

 

FileReader을 이용한 파일 일기

 

문자 스트림의 파일 입력 스트림 생성

 

파일전체를 읽어 화면에 출력하는 코드 샘플

Reader fin = new FileReader("c:\\test.txt"
/* C:\\test.txt 파일을 열고 파일과 입력 바이트 스트림 객체 fin 연결 */

int c;

while((c = fin.read()) != -1) 
//파일 끝까지 바이트씩 c에 읽어 들임 파일의 끝을 만나면 read()는 -1 리턴

System.out.println((char)c);//바이트 c를 문자로 변환하여 화면에 출력
}

fin.close(); /*스트림을 닫음. 파일도 닫힘 스트림과 파일의 연결을 끊음
더이상 스트림으로부터 읽을 수 없음*/

 

 

 

FileReader로 텍스트 파일 읽기

 

try/catch구문 사용하여 오류 최소화

FileReader 코드를 이용하여 텍스트 파일 읽기

 

 

package project4;

import java.io.*;


public class FileReaderEx {
	public static void main(String[] args) {
		FileReader fin = null;
		try {
			fin = new FileReader("c:\\windows\\system.ini");
			int c;
			while((c = fin.read()) != -1) {
				System.out.print((char)c);
			}
			fin.close();
		}
		catch(IOException e) {
			System.out.println("입출력 오류");
		}
	}
}

 

 

 

 

 

FileWriter 사용 예

 

c:\Temp\test.txt로의 문자출력

FileWriter fout = new FileWriter("c:\\Temp\\test.txt");

 

파일 쓰기

문자 단위 쓰기

FileWriter fout = new FileWriter("c:\\Temp\\test.txt");
fout.write('A'); // 문자 'A' 출력
fout.close();

블록 단위 쓰기

char [] buf = new char[1024];

// buf[] 배열의 처음부처 배열 크기(1024개의 문자)만큼 쓰기
fout.write(buf,0,buf.length);

 

 

키보드 입력을 파일로 저장하기

 

package project4;

import java.io.*;
import java.util.*;

public class FileWriterEx {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		FileWriter fout = null;
		int c;
		try {
			fout = new FileWriter("c:\\test.txt");
			while(true) {
				String line = scanner.nextLine();
				if(line.length() == 0)
					break;
				fout.write(line,0,line.length());
				fout.write("\r\n,0,2");  //한 줄 띄기 위해 \r\n을 파일에 저장
			} 
			fout.close();
		}catch(IOException e) {
			System.out.println("입출력 오류");
		}
		scanner.close();
	}
}
반응형