1. 자바 입출력이란?
입출력(IO, Input/Output)은 프로그램이 외부와 데이터를 주고받는 기능을 의미한다. 자바에서는 다양한 입출력 클래스를 제공하며, 파일, 키보드 입력, 네트워크 등을 통해 데이터를 주고받을 수 있다.
2. 입출력 스트림(Stream)의 개념
스트림(Stream)은 데이터를 연속적으로 읽거나 쓰는 데 사용된다. 자바의 입출력은 대부분 스트림을 기반으로 동작한다.
2.1 스트림의 종류
- 바이트 스트림 (Byte Stream): 바이트 단위로 데이터를 처리 (예: InputStream, OutputStream)
- 문자 스트림 (Character Stream): 문자 단위로 데이터를 처리 (예: Reader, Writer)
3. 파일 입출력
자바에서는 java.io 패키지를 활용하여 파일을 읽고 쓸 수 있다.
3.1 파일 읽기 (FileReader)
import java.io.FileReader;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
// example.txt 파일을 읽기 위한 FileReader 객체 생성
try (FileReader reader = new FileReader("example.txt")) {
int ch;
// 파일 끝까지 한 문자씩 읽어서 출력
while ((ch = reader.read()) != -1) {
System.out.print((char) ch);
}
} catch (IOException e) {
e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
}
}
}
3.2 파일 쓰기 (FileWriter)
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteExample {
public static void main(String[] args) {
// example.txt 파일을 생성하고 문자열을 저장하는 FileWriter 객체 생성
try (FileWriter writer = new FileWriter("example.txt")) {
writer.write("Hello, Java IO!"); // 파일에 문자열 저장
} catch (IOException e) {
e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
}
}
}
4. 버퍼를 활용한 효율적인 입출력
입출력 성능을 높이기 위해 버퍼를 사용할 수 있다.
4.1 BufferedReader로 파일 읽기
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReadExample {
public static void main(String[] args) {
// BufferedReader를 사용하여 파일을 효율적으로 읽음
try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
String line;
// 한 줄씩 읽어서 출력
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
}
}
}
4.2 BufferedWriter로 파일 쓰기
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriteExample {
public static void main(String[] args) {
// BufferedWriter를 사용하여 파일에 데이터를 효율적으로 저장
try (BufferedWriter bw = new BufferedWriter(new FileWriter("example.txt"))) {
bw.write("Buffered Writer Example"); // 파일에 문자열 저장
bw.newLine(); // 줄 바꿈
bw.write("Using Java IO");
} catch (IOException e) {
e.printStackTrace(); // 예외 발생 시 오류 메시지 출력
}
}
}
5. Scanner를 활용한 콘솔 입력
키보드 입력을 받을 때 Scanner를 사용할 수 있다.
import java.util.Scanner;
public class ScannerExample {
public static void main(String[] args) {
// Scanner 객체를 생성하여 콘솔 입력을 받음
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine(); // 사용자 입력 받기
System.out.println("Hello, " + name + "!"); // 입력값 출력
scanner.close(); // Scanner 닫기
}
}
6. 파일 입출력 시 주의할 점
- 입출력 연산은 IOException을 발생시킬 수 있으므로 반드시 예외 처리를 해야 한다.
- 파일을 다 사용한 후에는 close()를 호출하거나 try-with-resources를 사용해 자동으로 닫아야 한다.
- 버퍼를 사용하면 입출력 속도를 향상시킬 수 있다.
7. 마치며
이번 글에서는 자바 입출력의 기본 개념과 파일 입출력 방법을 알아보았다. 기본적인 FileReader, FileWriter부터 BufferedReader, BufferedWriter, 그리고 Scanner까지 다양한 입출력 방법을 살펴보았다. 실제 프로젝트에서 파일을 다룰 때 활용하면 유용할 것이다.
추후에는 **NIO(새로운 입출력 API)**와 네트워크 입출력도 다뤄보겠다.
'JAVA' 카테고리의 다른 글
| 자바 네트워크 입출력(Network IO) (1) | 2025.03.07 |
|---|---|
| 자바 고급 입출력 (NIO와 직렬화) (1) | 2025.03.06 |
| [java] 변수의 타입(자료형, data type) (0) | 2024.05.14 |
| 요청 URL 가져오는 메서드들 정리 (0) | 2023.09.28 |
| [java] 지네릭스-<T extends Fruit>과 <? extends Fruit>의 차이 (0) | 2023.07.14 |