본문 바로가기
JAVA

JAVA 파일 입출력과 스트림(FileInputStream, InputStreamReader, FileReader)

by 자바비터 2022. 4. 6.

▶ 파일 입출력

파일 입출력 메소드는 입력과 출력을 표준 입출력 장치가 아닌 파일로 처리하는 메소드이다.

   

▶ 파일 입출력의 기본과정

1단계 : 파일 열기

- 읽기용 : FileInputStream 변수명 = new FileInputStream("파일명");

- 쓰기용 : FileOutputStream 변수명 = new FileInputStream("파일명");

2단계 : 파일 처리

- 데이터를 쓰거나 파일로부터 데이터를 읽어올 수 있는 상태

3단계 : 파일 닫기

- 변수명.close();

   

   

▶File 클래스의 주요 메소드

  

  

▶ 스트림(Stream)이란?

: 스트림은 데이터를 송수신하기 위한 통로의 개념으로서 입력 혹은 출력, 한쪽 방향으로만 진행된다.

 

스트림은 1바이트를 처리하는 바이트 스트림과 2바이트를 처리하는 문자 스트림으로 나뉜다.

FileInputStream, FileOutputStream은 바이트 스트림에 해당

BufferedReader, BufferedWriter, FileReader, FileWriter는 문자 스트림에 해당

*한글은 2바이트이므로 문자 스트림을 사용하는 것이 더 편리하다.(2바이트 넘을 때도 있음)

 

*FileInputStream은 예외처리가 꼭 필요하다.

main문에 throw Exception을 추가하거나, try catch문으로 IOException으로 예외처리를 해줘야 한다.

  

  

▶ InputStreamReader, FileInputStream 예제(1바이트)

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

public class TestStream {
	public static void main(String[] args) {
		//바이트스트림(1바이트)
		InputStreamReader in = null; //가져온 텍스트파일 인코딩
		FileInputStream fin = null; //텍스트파일가져오는 스트림
		try {
			fin = new FileInputStream("C://aaa//data1.txt"); //경로에 있는 텍스트 파일을 가져와 객체 생성
			in = new InputStreamReader(fin, "UTF-8"); //인코딩을 UTF-8로 한다(한글 나오게 하기 위해서)
			int c;
			//스트림이 사용하는 문자 집합 이름 리턴
			System.out.println("인코딩 문자 집합은 " + in.getEncoding()); 
			
			while((c = in.read()) != -1) { //파일에서 문자 하나를 read()로 읽어온다. 문자가 끝일 경우 -1을 반환한다.
				System.out.print((char)c); //바이트스트림 char타입
			}
			//스트림 메소드는 코드가 종료될 때 같이 종료해줘야 한다
			in.close();
			fin.close();
		}catch(IOException e) { //try-catch문 쓰기싫으면 throws exception 사용
			System.out.println("입출력 오류");
		}
	}
}

실행 결과 화면

 

위 보이는거와 같이 data1 파일을 가져와 파일의 문자를 가져오는 예제이다.

read() 는 파일에서 문자 하나를 읽어오는 메소드이며, read()는 가져올 문자가 없으면 -1을 반환하기 때문에

while문을 사용해 문자가 끝나면 while문을 빠져나오도록 하였다.

 

 

   

▶ FileReader, BufferedReader 예제(2바이트)

import java.io.BufferedReader;
import java.io.FileReader;

public class TestReader {
	public static void main(String[] args) throws Exception {
		//문자스트림(2바이트)
		FileReader fReader = new FileReader("c:/Windows/win.ini"); //윈도우에 기본으로 있는 파일
		BufferedReader bReader = new BufferedReader(fReader);
		//행단위로 읽기 위해 BufferedReader 클래스 활용
		String str = null;
		//readLine : 파일 내용 행 단위로 읽어오는 메소드
		while((str = bReader.readLine()) != null) {
			//BufferedReader 에서 파일의 한 행씩 읽기
			System.out.println(str);
		}
		bReader.close();
		fReader.close();
		}
}

실행 결과 화면

readLine은 파일 내용을 행 단위로 읽어오는 메소드로

이 예제에서도 while문을 사용해 파일안에 문자를 한 행씩 읽어왔다.

댓글