이것 저것 개발 공부/JAVA
[Java] 입출력
crushed-taro
2025. 3. 1. 14:25
728x90
반응형
1. 입출력 개요
1. Java 입출력이란
입출력(I/O, Input and Output)이란 프로그램이 외부에서 데이터를 입력받고 출력하는 과정을 의미합니다.
Java에서는 java.io 패키지와 java.nio 패키지를 사용하여 입출력을 처리할 수 있습니다.
2. 입출력 방식의 종류
Java의 입출력은 크게 기본 스트림 (Stream)과 NIO (New I/O) 방식으로 나뉩니다.
• Stream (기본 I/O): InputStream, OutputStream, Reader, Writer 사용
• NIO (New I/O): java.nio 패키지를 활용하여 버퍼(Buffer) 기반의 비동기 처리 지원
2. 파일 관련 입출력
1. 파일 입력 (File Input)
Java에서 파일을 읽을 때 FileReader, BufferedReader, FileInputStream 등을 사용할 수 있습니다.
import java.io.*;
public class FileReadExample {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
System.out.println("파일을 읽는 중 오류 발생: " + e.getMessage());
}
}
}
2. 파일 출력 (File Output)
파일에 데이터를 쓰려면 FileWriter, BufferedWriter, FileOutputStream 등을 사용할 수 있습니다.
import java.io.*;
public class FileWriteExample {
public static void main(String[] args) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
writer.write("Java 파일 입출력 예제입니다.");
writer.newLine();
writer.close();
} catch (IOException e) {
System.out.println("파일을 쓰는 중 오류 발생: " + e.getMessage());
}
}
}
3. 바이트 기반 vs 문자 기반 스트림
Java의 입출력 스트림은 바이트 기반과 문자 기반으로 구분됩니다.
스트림 종류 | 클래스 | 설명 |
바이트 기반 입력 | InputStream | 바이트 단위 데이터 입력 |
바이트 기반 출력 | OutputStream | 바이트 단위 데이터 출력 |
문자 기반 입력 | Reader | 문자 단위 데이터 입력 |
문자 기반 출력 | Writer | 문자 단위 데이터 출력 |
1. 바이트 스트림 예제 (InputStream & OutputStream)
import java.io.*;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("image.jpg");
FileOutputStream fos = new FileOutputStream("copy.jpg")) {
int data;
while ((data = fis.read()) != -1) {
fos.write(data);
}
} catch (IOException e) {
System.out.println("파일 입출력 오류 발생: " + e.getMessage());
}
}
}
2. 문자 스트림 예제 (Reader & Writer)
import java.io.*;
public class CharStreamExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("text.txt");
FileWriter writer = new FileWriter("copy.txt")) {
int data;
while ((data = reader.read()) != -1) {
writer.write(data);
}
} catch (IOException e) {
System.out.println("파일 입출력 오류 발생: " + e.getMessage());
}
}
}
4. 버퍼링 (Buffering)과 성능 최적화
1. 버퍼링이란
파일을 읽고 쓸 때 버퍼(Buffer)를 사용하면 속도가 빨라집니다.
• BufferedReader / BufferedWriter → 텍스트 처리 속도 향상
• BufferedInputStream / BufferedOutputStream → 바이너리 처리 속도 향상
import java.io.*;
public class BufferedExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("largeFile.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
} catch (IOException e) {
System.out.println("버퍼링 입출력 오류 발생: " + e.getMessage());
}
}
}
5. 자주 발생하는 입출력 예외 처리
예외 유형 | 원인 | 해결 방법 |
FileNotFoundException | 파일이 존재하지 않음 | 파일 경로 확인 |
IOException | 읽기/쓰기 중 오류 | try-catch 블록으로 예외 처리 |
SecurityException | 접근 권한 없음 | 파일 권한 확인 |
728x90
반응형