Java 기본 I/O — 스트림과 파일 다루기

Java 기본 I/O — 스트림과 파일 다루기

파일을 읽고 쓰고, 콘솔에 출력하고, 객체를 저장했다가 다시 꺼내는 일은 어떤 프로그램에서도 빠지기 어려워요. Java는 이런 입출력(I/O)을 **스트림(stream)**이라는 개념으로 단순화해요. 이 강의는 그 스트림 개념부터 파일 I/O와 파일 시스템 연산까지 아우르는 기본 I/O 전반을 다뤄요.

출처: Lesson: Basic I/O (The Java Tutorials)

I/O 스트림

스트림은 I/O를 크게 단순화하는 강력한 개념이에요. 스트림의 종류를 몇 개만 짚어 볼게요.

  • 바이트 스트림(Byte Streams) — 원시 바이너리 데이터의 I/O 처리
  • 문자 스트림(Character Streams) — 문자 데이터를 처리하며 로컬 문자셋과의 변환을 자동 처리
  • 버퍼드 스트림(Buffered Streams) — 네이티브 API 호출 횟수를 줄여 입출력을 최적화
  • 데이터 스트림(Data Streams) — 기본 타입과 String 값의 바이너리 I/O
  • 객체 스트림(Object Streams) — 객체의 바이너리 I/O (직렬화)

대부분의 I/O 스트림 클래스는 java.io 패키지에 있어요. 객체 스트림을 쓰면 프로그램이 객체 전체를 스트림으로 내보내고 다시 읽어 들이는 **직렬화(serialization)**도 가능해요.

파일 I/O (NIO.2)

파일 I/O 관련 클래스는 대부분 java.nio.file 패키지에 있어요. 이 강의에서는 파일 시스템의 경로(path) 개념부터 시작해요.

  • What is a Path? — 파일 시스템에서 경로가 무엇인지
  • The Path Classjava.nio.file 패키지의 핵심 클래스
  • Path OperationsPath 클래스의 구문 연산 메서드
  • File Operations — 파일 I/O 메서드 전반에 공통으로 적용되는 개념
  • Reading, Writing and Creating Files — 파일을 읽고 쓰고 만드는 스트림·채널 메서드

예를 들어 파일을 읽는 기본적인 흐름은 이런 느낌이에요.

import java.nio.file.*;

Path file = Paths.get("data.txt");
String content = Files.readString(file);
System.out.println(content);

또한 랜덤 액세스 파일, 디렉터리 생성·읽기, 심볼릭 링크, 파일 변경 감시(watch service)까지 다루고, 구식 코드(java.io.File)를 쓰고 있다면 Path 기능으로 옮기는 방법과 API 매핑 표도 제공해요.

핵심은 이거예요. "바이트·문자·객체를 다루는 스트림 개념"과 "java.nio.filePath 기반 파일 조작" — 이 두 갈래를 알면 Java I/O의 큰 그림이 잡혀요.

더 알아보기