파일로 유니코드 읽기 및 쓰기
이 단계에서는 유니코드 문자를 파일로 읽고 쓰는 방법을 배우겠습니다. 특히 국제 텍스트를 다룰 때 파일 작업 시 문자 인코딩을 적절하게 처리하는 것이 중요합니다.
문자 인코딩 이해하기
텍스트를 파일에 쓰거나 파일에서 읽을 때는 문자 인코딩을 지정해야 합니다. 유니코드 텍스트에 가장 일반적이고 권장되는 인코딩은 UTF-8 입니다.
- UTF-8은 모든 유니코드 문자를 표현할 수 있는 가변 너비 인코딩입니다.
- ASCII 와 하위 호환됩니다.
- HTML, XML 및 많은 최신 시스템의 기본 인코딩입니다.
Java 는 UTF-8, UTF-16 및 ISO-8859-1 과 같은 표준 문자 집합에 대한 상수를 포함하는 java.nio.charset.StandardCharsets 클래스를 제공합니다.
유니코드 텍스트를 파일로 읽고 쓰는 것을 보여주는 프로그램을 만들어 보겠습니다.
유니코드 파일 작성기 만들기
-
/home/labex/project 디렉토리에 UnicodeFileDemo.java라는 새 파일을 만듭니다.
-
다음 코드를 파일에 추가합니다.
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.*;
import java.util.*;
public class UnicodeFileDemo {
private static final String FILE_PATH = "unicode_sample.txt";
public static void main(String[] args) {
try {
// Create a list of greetings in different languages
List<String> greetings = Arrays.asList(
"English: Hello, World!",
"Spanish: ¡Hola, Mundo!",
"French: Bonjour, le Monde!",
"German: Hallo, Welt!",
"Chinese: 你好,世界!",
"Japanese: こんにちは、世界!",
"Arabic: مرحبا بالعالم!",
"Russian: Привет, мир!",
"Greek: Γειά σου, Κόσμε!",
"Hindi: नमस्ते, दुनिया!",
"Emoji: 👋🌍!"
);
// Write greetings to file
writeToFile(greetings);
System.out.println("Successfully wrote Unicode text to " + FILE_PATH);
// Read and display file contents
List<String> readLines = readFromFile();
System.out.println("\nFile contents:");
for (String line : readLines) {
System.out.println(line);
}
// Display encoding information
System.out.println("\nEncoding information:");
System.out.println("Default charset: " + System.getProperty("file.encoding"));
System.out.println("Is UTF-8 supported? " + StandardCharsets.UTF_8.canEncode());
} catch (IOException e) {
System.err.println("Error processing the file: " + e.getMessage());
e.printStackTrace();
}
}
private static void writeToFile(List<String> lines) throws IOException {
// Write using Files class with UTF-8 encoding
Files.write(Paths.get(FILE_PATH), lines, StandardCharsets.UTF_8);
}
private static List<String> readFromFile() throws IOException {
// Read using Files class with UTF-8 encoding
return Files.readAllLines(Paths.get(FILE_PATH), StandardCharsets.UTF_8);
}
}
-
Ctrl+S를 누르거나 메뉴에서 File > Save 를 선택하여 파일을 저장합니다.
-
터미널에서 다음 명령을 실행하여 프로그램을 컴파일하고 실행합니다.
javac UnicodeFileDemo.java
java UnicodeFileDemo
다음과 유사한 출력을 볼 수 있습니다.
Successfully wrote Unicode text to unicode_sample.txt
File contents:
English: Hello, World!
Spanish: ¡Hola, Mundo!
French: Bonjour, le Monde!
German: Hallo, Welt!
Chinese: 你好,世界!
Japanese: こんにちは、世界!
Arabic: مرحبا بالعالم!
Russian: Привет, мир!
Greek: Γειά σου, Κόσμε!
Hindi: नमस्ते, दुनिया!
Emoji: 👋🌍!
Encoding information:
Default charset: UTF-8
Is UTF-8 supported? true
출력 파일 검토
만든 파일을 살펴보겠습니다.
-
WebIDE 파일 탐색기를 사용하여 /home/labex/project 디렉토리에 생성된 unicode_sample.txt 파일을 엽니다.
-
다양한 언어로 된 모든 인사가 유니코드 문자와 함께 제대로 표시되는 것을 볼 수 있습니다.
코드 이해하기
이 프로그램은 파일에서 유니코드 작업을 수행하는 방법에 대한 몇 가지 주요 사항을 보여줍니다.
-
명시적 인코딩 지정: StandardCharsets.UTF_8을 사용하여 파일에 쓰고 읽을 때 UTF-8 인코딩을 명시적으로 지정합니다. 이렇게 하면 유니코드 문자가 올바르게 보존됩니다.
-
최신 파일 I/O: 특정 문자 인코딩으로 파일을 읽고 쓰는 데 편리한 메서드를 제공하는 java.nio.file.Files 클래스를 사용합니다.
-
기본 인코딩: 이 프로그램은 운영 체제 및 로캘 설정에 따라 달라질 수 있는 시스템의 기본 문자 인코딩을 표시합니다.
-
이모지 지원: 이 프로그램에는 Java 와 UTF-8 이 유니코드의 보조 평면 (supplementary planes) 의 문자를 처리할 수 있음을 보여주는 이모지 예제 (👋🌍) 가 포함되어 있습니다.
파일에서 유니코드로 작업할 때는 항상 다음 사항을 기억하십시오.
- 인코딩을 명시적으로 지정합니다 (가급적 UTF-8).
- 읽기 및 쓰기에 동일한 인코딩을 사용합니다.
- 파일 작업 중에 발생할 수 있는 잠재적인
IOException을 처리합니다.
- 시스템의 기본 인코딩을 알고 있지만, 이에 의존하지 마십시오.