Files
java-examples/docs/io.md

5.5 KiB

자바 IO (Input/Output) 관련 클래스 및 주요 메서드 정리

자바 IO는 데이터를 스트림(Stream) 기반으로 읽고 쓰는 전통적인 입출력 API다.
주로 파일, 콘솔, 네트워크, 메모리 등과 데이터를 주고받는 데 사용된다.


1. InputStream (바이트 입력 스트림)

메서드 설명
read() 1바이트를 읽고 정수(0~255)로 반환, 끝이면 -1 반환
read(byte[] b) 바이트 배열에 데이터를 읽음
available() 읽을 수 있는 바이트 수 반환
close() 스트림 닫기

주요 하위 클래스:

  • FileInputStream (파일에서 바이트 읽기)
  • ByteArrayInputStream (바이트 배열에서 읽기)
  • BufferedInputStream (버퍼링으로 성능 향상)

2. OutputStream (바이트 출력 스트림)

메서드 설명
write(int b) 1바이트 쓰기
write(byte[] b) 바이트 배열을 스트림에 쓰기
flush() 버퍼에 있는 데이터를 즉시 출력
close() 스트림 닫기

주요 하위 클래스:

  • FileOutputStream (파일에 바이트 쓰기)
  • ByteArrayOutputStream (바이트 배열에 쓰기)
  • BufferedOutputStream (버퍼링으로 성능 향상)

3. Reader (문자 입력 스트림)

메서드 설명
read() 문자 하나 읽기
read(char[] cbuf) 문자 배열에 읽기
close() 스트림 닫기

주요 하위 클래스:

  • FileReader (파일에서 문자 읽기)
  • BufferedReader (버퍼링으로 성능 향상)
  • StringReader (문자열에서 읽기)

4. Writer (문자 출력 스트림)

메서드 설명
write(int c) 문자 하나 쓰기
write(char[] cbuf) 문자 배열을 스트림에 쓰기
flush() 버퍼 비우기
close() 스트림 닫기

주요 하위 클래스:

  • FileWriter (파일에 문자 쓰기)
  • BufferedWriter (버퍼링으로 성능 향상)
  • StringWriter (문자열에 쓰기)

5. File 클래스 (파일 및 디렉토리 관리)

메서드 설명
exists() 파일이 존재하는지 확인
createNewFile() 새 파일 생성
delete() 파일 삭제
mkdir() 새 디렉토리 생성
listFiles() 디렉토리 내 파일 목록 반환

6. BufferedReaderBufferedWriter (성능 향상)

메서드 설명
readLine() 한 줄씩 읽기 (BufferedReader 전용)
write(String s) 문자열 출력 (BufferedWriter 전용)
flush() 버퍼 비우기
close() 스트림 닫기

자바 IO 쉽게 설명하기

자바의 IO는 데이터를 스트림(Stream) 기반으로 입출력하는 방식이다.
즉, 한 번에 하나의 데이터(바이트 or 문자)를 순차적으로 처리하는 구조다.


1. 파일에서 데이터 읽기 (FileReader)

FileReader reader = new FileReader("example.txt");
int data;
while ((data = reader.read()) != -1) {
    System.out.print((char) data);
}
reader.close();
  • read() → 한 글자씩 읽음
  • close() → 파일 닫기

2. 파일에 데이터 쓰기 (FileWriter)

FileWriter writer = new FileWriter("example.txt");
writer.write("Hello, Java IO!");
writer.close();
  • write() → 파일에 문자열 저장
  • close() → 파일 닫기

3. 파일을 빠르게 읽기 (BufferedReader)

BufferedReader br = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}
br.close();
  • readLine() → 한 줄씩 읽기 (효율적)
  • BufferedReader → 버퍼링으로 속도 향상

4. 파일을 빠르게 쓰기 (BufferedWriter)

BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"));
bw.write("Buffered Writer 사용!");
bw.newLine(); // 줄바꿈
bw.close();
  • newLine() → 줄바꿈 추가
  • BufferedWriter → 속도 향상

5. 바이트 단위 파일 복사 (FileInputStream, FileOutputStream)

FileInputStream fis = new FileInputStream("input.txt");
FileOutputStream fos = new FileOutputStream("output.txt");

int data;
while ((data = fis.read()) != -1) {
    fos.write(data);
}

fis.close();
fos.close();
  • read() → 1바이트씩 읽기
  • write() → 1바이트씩 출력

6. 문자 단위 파일 복사 (FileReader, FileWriter)

FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt");

int data;
while ((data = fr.read()) != -1) {
    fw.write(data);
}

fr.close();
fw.close();
  • FileReader → 문자 기반 파일 읽기
  • FileWriter → 문자 기반 파일 쓰기

정리

자바 IO는 스트림 기반으로 데이터를 읽고 쓰는 방식을 제공한다.

  • 바이트 단위 (InputStream, OutputStream) → 이미지, 동영상, 바이너리 파일 처리
  • 문자 단위 (Reader, Writer) → 텍스트 파일 처리
  • 버퍼링 (BufferedReader, BufferedWriter) → 성능 최적화

즉, IO 스트림을 적절히 활용하면 다양한 입출력 작업을 쉽게 수행할 수 있다!