문자(Text) 스트림, 버퍼(Buffer) 스트림, File 클래스
1. 문자 스트림
■ 문자 스트림
✓ 문자 스트림 연관 클래스
✓ Writer 클래스와 Reader 클래스
. 문자 스트림의 입출력에 필요로 되는 다양한 메서드를 제공하는 추상 클래스
- Writer 클래스의 주요 메서드
메서드 | 설명 |
void close() | 출력 스트림을 닫기 |
void flush() | 출력 버퍼에 저장된 모든 데이터를 출력장치로 전송 |
void write(int c) | c의 하위 16비트를 스트림으로 출력 |
void write(char buffer[]) | buffer 배열에 있는 문자들을 스트림으로 출력 |
void write(char buffer[], int index, int size) | buffer 배열의 index부터 size만큼의 문자들을 스트림으로 출력 |
void write(String s) | 문자열 s를 스트림으로 출력 |
void write(String s, int index, int size) | 문자열 s의 index부터 size 만큼의 문자들을 스트림으로 출력 |
- Reader클래스의 주요 메서드
void close() | 입력 스트림을 닫기 |
int read() | 다음 문자를 읽어 반환, 입력 스트림에 읽을 문자가 없을 때는 대기, 읽은 문자가 파일의 끝이면 -1을 반환 |
int read(char buffer[]) | buffer 크기만큼 문자를 읽어 buffer에 저장 |
int read(char buffer[], int offset, int numChars) | numChars에 지정한 만큼의 문자를 읽어 buffer의 offset 위치에 저장하고 읽은 문자의 개수를 반환 |
void mark(int numChars) | 입력 스트림의 현재 위치에 마크 |
boolean markSupported() | 현재의 입력 스트림이 mark()와 reset()를 지원하는지의 여부 반환 |
boolean ready() | 다음 read()문을 수행할 수 있는지의 여부 반환 |
void reset() | 입력 스트림의 입력 시작 부분을 현재의 위치에서 가장 가까운 이전 mark 위치로 설정 |
int skip(long numChars) | numChar로 지정된 문자수 만큼 건너뛰고 건너 뛴 문자수를 반환 |
String readLine() | BufferedReader 클래스의 메서드로 문자열을 한 줄 읽기 |
2. 파일 문자 스트림
■ 문자 스트림
✓ 파일 문자 스트림
- FileReader의 생성자
생성자 | 설명 |
FileReader(File file) | file에 지정된 파일로부터 읽는 FileReader 생성 |
FileReader(String name) | name 이름의 파일로부터 읽는 FileReader 생성 |
- FileReader의 주요 메서드
메서드 | 설명 |
int read() | 한 개의 문자를 읽어 정수형으로 리턴 |
int read(char[] cbuf) | 최대 cbuf 배열의 크기만큼 문자들을 읽어 cbuf 배열에 저장, 만일 읽는 도중 EOF를 만나면 실제 읽은 문자 개수 리턴 |
int read(char[] cbuf, int off, int len) | 최대 len 크기만큼 읽어 cbuf 배열의 off부터 저장, 읽는 도중 EOF를 만나면 실제 읽은 문자 개수 리턴 |
String getEncoding() | 스트림이 사용하는 문자 집합의 이름 리턴 |
void close() | 입력 스트림을 닫고 관련된 시스템 자원 해제 |
- FileWriter의 생성자
생성자 | 설명 |
FileWriter(File file) | file에 데이터를 저장할 FileWriter 생성 |
FileWriter(String name) | name 파일에 데이터를 저장할 FileWriter 생성 |
FileWriter(File file, boolean append) | FileWriter를 생성하며, append가 true이면 파일의 마지막 부터 데이터 저장 |
FileWriter(String name, boolean append) | FileWriter를 생성하며, append가 true이면 파일의 마지막부터 데이터 저장 |
- FileWriter의 주요 메서드
메서드 | 설명 |
void write(int c) | c를 char로 변환하여 한 개의 문자 출력 |
void write(String str, int off, int len) | 인덱스 off부터 len개의 문자를 str 문자열에서 출력 |
void write(char[] buf, int off, int len) | 인덱스 off부터 len개의 문자를 배열 cbuf에서 출력 |
void flush() | 스트림에 남아 있는 데이터 모두 출력 |
String getEncoding() | 스트림이 사용하는 문자 집합의 이름 리턴 |
void close() | 출력 스트림을 닫고 관련된 시스템 자원 해제 |
■ 문자 스트림으로 텍스트 파일 읽기
✓ 텍스트 파일을 읽기 위해 문자 스트림 FileReader 클래스 이용
1. 파일 입력 스트림 생성(파일 열기) // 스트림을 생성하고 파일을 열어 스트림과 연결
1
|
FileReader fin = new FileReader("파일경로");
|
cs |
2. 파일 읽기 // read()로 문자 하나씩 파일에서 읽기
1
|
FileReader fin = new FileReader("파일경로");
|
cs |
3. 스트림 닫기 // 스트림이 더 이상 필요 없으면 닫아야 함, 닫힌 스트림에서는 읽을 수 없음 close()
1
|
fin.close();
|
cs |
■ 문자 스트림으로 텍스트 파일 쓰기
✓ 텍스트 파일을 쓰기 위해 문자 스트림 FileWriter 클래스 이용
1. 파일 출력 스트림 생성(파일 열기) // 스트림을 생성하고 파일을 열어 스트림과 연결
1
|
FileWriter fout = new FileWriter("파일경로");
|
cs |
2. 파일 쓰기 // write()로 문자 하나 씩 파일에 기록
1
|
fout.write('A');
|
cs |
// 블록 단위로 쓰기 가능
1
2
|
char buf = new char[1024];
fout.write(buf, 0, buf.length); // buf[0]부터 버퍼
|
cs |
3. 스트림 닫기 // close()로 스트림 닫기
1
|
fin.close();
|
cs |
3. 버퍼 스트림
디스크에서 한번 읽을 때 왕창 읽어 놓고 버퍼(buffer)라는 데이터를 저장하는 창고에 넣어 두었다가 필요할 때 하나씩 꺼내 쓰는 것, 다 떨어지면 디스크에서 다시 읽는다.
■ 버퍼 스트림
✓ BufferedWriter 클래스와 BufferedReader 클래스
□ 버퍼 스트림의 종류
✓ 바이트 스트림
. 바이트 단위의 바이너리 데이터를 처리하는 버퍼 스트림
. BufferedInputStream과 BufferedOutputStream
✓ 문자 스트림
. 유니코드의 문자 데이터만을 처리하는 버퍼 스트림
. BufferedReader와 BufferedWriter
□ BufferedWriter 클래스
✓ Writer 클래스의 하위 클래스
✓ 문자 스트림의 출력 시 버퍼를 사용
✓ 생성자
BufferedWriter(Writer outputStream)
BufferedWriter(Writer outputStream, int bufSize)
outputStream: Writer 타입의 객체, 출력 스트림을 의미
bufSize: 버퍼의 크기를 지정, 지정하지 않으면 묵시적인 크기의 버퍼 사용
✓ 메서드
void newLine() throws IOException // 새로운 라인에 출력
□ BufferedReader 클래스
✓ Reader 클래스의 하위 클래스
✓ 문자 스트림의 입력 시 버퍼를 사용
✓ 생성자
BufferedReader(Reader inputStream)
BufferedReader(Reader inputStream, int bufSize)
inputStream: Reader 타입의 객체로서 입력 스트림을 의미
bufSize: 버퍼의 크기 지정
✓ 메서드
void readLine() throws IOException // 한 라인을 읽어 온다.
■ 버퍼 입출력(Buffered I/O)
✓ 버퍼 입출력은 입출력 장치와 프로그램 사이에 버퍼를 두어 효율적으로 입출력 처리
✓ 프로그램의 실행 속도와 입출력 장치의 데이터 처리 속도의 불일치에 대처하기 쉽다.
4. File 클래스
■ File 클래스
✓ 파일의 경로명 및 속성을 다루는 클래스
. java.io.File
. 파일과 디렉터리 경로명의 추상적 표현
✓ 파일 이름 변경, 삭제, 디렉터리 생성, 크기 등 파일 관리
✓ File 객체에는 파일 읽기/쓰기 기능 없음
. 파일 입출력은 파일 입출력 스트림 이용
✓ File 객체와 스트림을 연결하여 파일 접근
○File 객체 생성
✓ 생성자에 파일 경로명을 주어 File 객체 생성
1
|
File f = new File("파일경로 + 파일명");
|
cs |
✓ 디렉터리와 파일명을 나누어 생성자 호출
1
|
File f = new File("파일경로", "파일 이름");
|
cs |
- File 클래스의 생성자
메서드 | 설명 |
File(File parent, String child) | parent 디렉터리에 child 이름의 디렉터리나 파일을 나타내는 File 객체 생성 |
File(String pathname) | pathname의 완전 경로명이 나타내는 File 객체 생성 |
File(String parent, String child) | parent 디렉터리에 child 이름의 디렉터리나 파일을 나타내는 FIle 객체 생성 |
File(URI uri) | file:URI를 추상 경로명으로 변환하여 FIle 객체 생성 |
- File 클래스의 주요 메서드
메서드 |
설명 |
boolean() mkdir |
새로운 디렉터리 생성 |
String[] list() |
디렉터리 내의 파일과 서브 디렉터리 리스트를 문자열 배열로 리턴 |
File [] listFiles() |
디렉터리 내의 파일과 서브 디렉터리 리스트를 File [] 배열로 리턴 |
boolean renameTo(Fiile dest) |
dest가 지정하는 경로명으로 파일 이름 변경 |
boolean delete() |
파일 또는 디렉터리 삭제 |
long length() |
파일의 크기 리턴 |
String getPath() |
경로명 전체를 문자열로 변환하여 리턴 |
String getParent() |
파일이나 디렉터리의 부모 디렉터리 이름 리턴 |
String getName() |
파일 또는 디렉터리 이름을 문자열로 리턴 |
boolean isFile() |
일반 파일이면 true 리턴 |
boolean isDirectory() |
디렉터리이면 true 리턴 |
long lastModified() |
파일이 마지막으로 변경된 시간 리턴 |
boolean exists() |
파일 또는 디렉터리가 존재하면 true 리턴 |
■ File 클래스 활용
✓ 파일 크기
1
|
long size = f.length();
|
cs |
✓ 파일 경로명
1
2
3
4
|
File f = new File("파일경로\\파일명");
String filename = f.getName(); //파일명
String path = f.getPath(); // 파일경로+파일명
String parent = f.getParent(); // 파일경로 부모폴더
|
cs |
✓ 파일 타입
1
2
3
4
5
|
if(f.isFile())
System.out.println(f.getPath() + "는 파일입니다."); //파일
else if(f.isDirectory())
System.out.println(f.getPath() + "는 디렉터리입니다."); // 디렉터리
|
cs |
✓ 디렉터리 파일 리스트 얻기
1
2
3
4
5
6
7
|
File f = new File("파일디렉터리")
File[] subfiles = f.listFiles(); // 디렉터리의 파일 및 서브 디렉터리 리스트 얻기
for(int i=0; i<filenames.length; i++) {
System.out.print(subfiles[i].getName(); // 서브 파일명 출력
System.out.print("\t파일 크기: " + subfiles[i].length()); //서브 파일크기
}
|
cs |
'Language > JAVA' 카테고리의 다른 글
[JAVA] 스트림(Stream) 연산 느긋한 연산, 조급한 연산, 병렬 처리 | Yoon's Dev (0) | 2021.05.18 |
---|---|
[JAVA] JAVA 람다식을 활용한 예제 (1) | Yoon's Dev (0) | 2021.05.08 |
[JAVA] JAVA의 입출력, 바이트 스트림(ByteStream) | Yoon's Dev (0) | 2021.04.24 |
[JAVA] JAVA의 입출력 스트림(Stream) | Yoon's Dev (0) | 2021.04.23 |
[JAVA] JAVA의 람다식 사용법 및 다양한 작성 예제 | Yoon's Dev (1) | 2021.04.21 |