Java에서 한글 파일 입출력
Java에서 한글 파일을 다룰 때는 문자 인코딩을 UTF-8로 명시적으로 지정하여 한글이 깨지지 않도록 해야 합니다. Java는 다양한 클래스에서 문자 인코딩을 설정하는 방식을 지원하며, 표준 인코딩 집합인 StandardCharsets를 사용하면 간편하게 UTF-8 인코딩을 지정할 수 있습니다. 각 클래스별로 한글 처리 방법과 예제를 아래에 정리하였습니다.
StandardCharsets
StandardCharsets는 Java에서 제공하는 클래스 중 하나로, 표준 문자 집합을 정의하는 상수들을 제공합니다. StandardCharsets.UTF_8을 통해 UTF-8 인코딩을 간편하게 지정할 수 있으며, 하드코딩한 문자열 "UTF-8" 대신 사용할 수 있어 오류를 줄여줍니다.
StandardCharsets는 Java 7부터 사용 가능하며, 이후의 버전에서도 계속 지원됩니다.
import java.nio.charset.StandardCharsets;
String utf8 = StandardCharsets.UTF_8.name(); // "UTF-8" 문자열 반환
FileReader와 FileWriter
FileReader와 FileWriter는 파일을 문자 단위로 읽고 쓸 때 사용되는 클래스입니다. 기본적으로 플랫폼의 기본 문자 집합을 사용하기 때문에, 한글과 같은 특정 인코딩을 처리하려면 Java 11 이상에서만 StandardCharsets로 인코딩을 지정할 수 있습니다. 이전 버전에서는 FileReader와 FileWriter에서 직접 인코딩을 설정할 수 없으므로 InputStreamReader와 OutputStreamWriter를 사용하는 것이 좋습니다.
import java.io.FileReader;
import java.io.FileWriter;
import java.nio.charset.StandardCharsets;
try (FileReader reader = new FileReader("sample.txt", StandardCharsets.UTF_8);
FileWriter writer = new FileWriter("output.txt", StandardCharsets.UTF_8)) {
// 파일 읽기 및 쓰기 작업 수행
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream과 FileOutputStream
FileInputStream과 FileOutputStream은 파일을 바이트 단위로 읽고 쓰는 데 사용됩니다. 이 클래스들은 인코딩을 지원하지 않기 때문에 텍스트 데이터를 처리할 때 InputStreamReader 및 OutputStreamWriter와 함께 사용하여 인코딩을 지정해야 합니다. 바이트 단위이므로 문자 데이터보다는 이미지나 바이너리 파일을 읽고 쓸 때 주로 사용됩니다.
import java.io.*;
try (InputStreamReader reader = new InputStreamReader(new FileInputStream("sample.txt"), StandardCharsets.UTF_8);
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
// 파일 읽기 및 쓰기 작업 수행
} catch (IOException e) {
e.printStackTrace();
}
Files 클래스
Java 7에서 도입된 Files 클래스는 java.nio.file 패키지에 속해 있으며 파일 및 디렉터리 조작을 위한 유틸리티 메서드를 제공합니다. Files.readAllLines() 또는 Files.write() 메서드를 통해 UTF-8 인코딩을 지정하여 텍스트 파일을 간편하게 읽거나 쓸 수 있습니다. Java 8 이상에서는 UTF-8이 기본값으로 설정될 때도 있지만, 한글 파일 처리를 위해 항상 인코딩을 명시하는 것이 안전합니다.
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.io.IOException;
import java.util.List;
try {
List<String> lines = Files.readAllLines(Paths.get("sample.txt"), StandardCharsets.UTF_8);
Files.write(Paths.get("output.txt"), lines, StandardCharsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader와 BufferedWriter
BufferedReader와 BufferedWriter는 버퍼링을 통해 파일을 효율적으로 처리할 수 있도록 돕는 클래스입니다. 큰 파일을 읽거나 쓸 때 성능을 향상시키며, InputStreamReader 및 OutputStreamWriter와 함께 사용하여 UTF-8과 같은 문자 인코딩을 지정해야 합니다. d
import java.io.*;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("sample.txt"), StandardCharsets.UTF_8));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
InputStreamReader와 OutputStreamWriter
InputStreamReader와 OutputStreamWriter는 바이트 스트림을 문자 스트림으로 변환해주는 브릿지 클래스입니다. FileInputStream과 FileOutputStream과 함께 사용하여 UTF-8과 같은 문자 인코딩을 설정할 수 있습니다. InputStreamReader는 바이트 입력을 문자로 읽어들이고, OutputStreamWriter는 문자를 바이트로 출력하므로, 문자 데이터 처리에 적합합니다.
import java.io.*;
try (InputStreamReader reader = new InputStreamReader(new FileInputStream("sample.txt"), StandardCharsets.UTF_8);
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("output.txt"), StandardCharsets.UTF_8)) {
int data;
while ((data = reader.read()) != -1) {
writer.write(data);
}
} catch (IOException e) {
e.printStackTrace();
}
이와 같은 클래스와 메서드를 사용하면 Java에서 한글 파일 입출력을 효율적으로 처리할 수 있습니다. try-with-resources 구문을 통해 자원 관리를 자동화할 수 있으며, UTF-8 인코딩을 명시적으로 설정함으로써 한글이 깨지지 않도록 합니다.
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] Date Calender SimpleDateFormat 과 java.time 패키지 (0) | 2025.01.16 |
---|---|
[JAVA] java.nio 패키지 총정리 (1) | 2024.12.30 |
[Java] Javadoc 활용한 자바 주석 처리 (0) | 2024.10.30 |
[Java] 바이트 크기를 사람이 읽기 편한 형식으로 변환 (kb, mb, gb ...) (0) | 2024.10.14 |
[JAVA] jdk 2개 이상 설정 방법 (java 버전 여러개 사용하기) (0) | 2024.10.11 |