JAVA/JAVA2

[java2] #25 - FileReader, FileWriter

yoonddo 2022. 9. 12. 17:33

FileReader, FileWriter는 자바에서 텍스트파일을 읽고 쓰기 위한 클래스이다.

문자 스트림으로 텍스트 파일을 읽고 쓰는데 사용된다.

 

자바의 입출력 스트림은 문자 스트림, 바이너리 스트림 두 종류가 존재하는데 문자 스트림은 문자만

입력하는 스트립으로 문자가 아닌 다른 데이터는 스트림에서 처리하지 못한다.

만약 동영상, 오디오 등의 바이너리 데이터를 읽고 쓴다면 바이너리 스트림을 사용해야 한다.


FileReader

FileReader는 파일 입력 스트림을 생성하고 파일을 열어 스트림과 연결한다.

Filereader 객체가 생성될 때에 파일과 직접 연결한다.


Filereader 생성자의 종류

FileReader(File file) 매개변수로 받은 파일을 읽는 FileReader를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileReader(FileDescriptor fd) 매개변수로 받은 파일 디스크립터를 읽는 FileReader를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileReader(File file, Charset charset) 매개변수로 받은 파일을 읽는 FileReader를 생성합니다.

매개변수로 받은 문자 인코딩(charset)을 사용합니다.
FileReader(String fileName) 매개변수로 받은 이름의 파일을 읽는 FileReader를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileReader(String fileName, Charset charset) 매개변수로 받은 이름의 파일을 읽는 FileReader를 생성합니다.

매개변수로 받은 문자 인코딩(charset)을 사용합니다.

지정된 경로명의 파일이 존재하지 않거나 파일이 존재하지만 파일에 문제가 있어 열 수 없거나,

쓰기 전용 파일을 읽으려 할 때에 스트림을 생성하는 생성자에 의해 FileNotFoundException이 발생한다.


파일의 내용을 읽는 방법

int read() 한 문자를 읽어옵니다.

return 읽어온 문자, 스트림의 끝에 도달한 경우 -1
int read(char[] cbuf) 내부에서는 read(cbuf, 0, cbuf.length)를 호출합니다.
cbuf의 크기만큼 문자들을 읽어옵니다.

retrun 읽어온 문자들의 수, 스트림의 끝에 도달한 경우 -1
abstract int read(char[] cbuf, int off, int len) 지정한 위치(off)부터 길이(len)만큼의 문자들을 cbuf로 읽어옵니다.

retrun 읽어온 문자들의 수, 스트림의 끝에 도달한 경우 -1
int read(CharBuffer target) 지정한 문자 버퍼로 문자들을 읽어옵니다.

retrun 읽어온 문자들의 수, 끝에 있는 경우 -1

파일 읽기가 끝났다면 close() 함수를 사용해 닫아야 한다.

close() 함수를 통해 스트림을 닫고 연결된 시스템 리소스를 해제한다.

파일을 닫지않고 여러 파일이나 동일한 파일을 연다면 문제가 발생할 수 있다.

 

디스크 오동작, 파일이 중간에 깨진 경우, 디스크 공간이 모자라서 파일 입출력이 불가능한 경우

파일 읽기, 쓰기, 닫기를 하는 동안 IOException이 발생할 수 있다.

read(), close()에서 I/O에러가 발생할 시 IOException이 발생하며 예외처리를 해주어야 한다.


FileWriter

FileWriter는 파일 출력 스트림을 생성하고 파일을 열어 스트림과 연결한다.

기본 버퍼 크기를 사용해 텍스트 파일에 텍스트를 쓴다. 지정된 문자 인코딩이나 기본 문자 인코딩을 사용한다.

파일을 사용할 수 있는지의 여부는 기본 플랫폼에 따라 다르다.

일부 플랫폼에서는 한 번에 하나의 FileWriter만 파일 출력을 위해 열어 사용할 수 있다.


FileWriter 생성자의 종류

FileWriter(File file) 매개변수로 주어진 파일로 FileWriter객체를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileWriter(FileDescriptor fd) 매개변수로 주어진 파일디스크립터로 FileWriter객체를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileWriter(File fd, boolean append) 매개변수로 주어진 파일로 FileWriter객체를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.

append는 이어쓰기 여부입니다.
FileWriter(File file, Charset charset) 매개변수로 주어진 파일로 FileWriter객체를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileWriter(File file, Charset charset, boolean append) 매개변수로 주어진 파일로 FileWriter객체를 생성합니다.

매개변수로 받은 문자 인코딩(charset)을 사용합니다.

append는 이어쓰기 여부입니다.
FileWriter(String filename) 매개변수로 주어진 파일경로로 FileWriter객체를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.
FileWriter(String filename, boolean append) 매개변수로 주어진 파일경로로 FileWriter객체를 생성합니다.

플랫폼의 기본 문자 인코딩(charset)을 사용합니다.

append는 이어쓰기 여부입니다.
FileWriter(String filename, Charset charset) 매개변수로 주어진 파일경로로 FileWriter객체를 생성합니다.

매개변수로 받은 문자 인코딩(charset)을 사용합니다.
FileWriter(String filename, Charset charset, boolean append) 매개변수로 주어진 파일경로로 FileWriter객체를 생성합니다.

매개변수로 받은 문자 인코딩(charset)을 사용합니다.

append는 이어쓰기 여부입니다.

파일의 내용을 쓰는 방법

void write(int c) 한 문자를 씁니다.
void write(char[] cbuf) cbuf의 내용을 씁니다.
void write(char[] cbuf, int off, int len) cbuf의 내용을 오프셋(off)부터 길이(len)만큼 씁니다.
void write(String str) 문자열의 내용을 씁니다.
void write(String str, int off, int len) 문자열의 내용을 오프셋(off)부터 길이(len)만큼 씁니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : https://dlee0129.tistory.com/219