ファイルでの Unicode の読み書き
このステップでは、ファイルに Unicode 文字を読み書きする方法を学びます。ファイルを扱う際、特に国際的なテキストを扱う場合、文字エンコーディングを適切に扱うことは非常に重要です。
文字エンコーディングの理解
ファイルにテキストを書き込む場合やファイルからテキストを読み取る場合、文字エンコーディングを指定する必要があります。Unicode テキストに最も一般的で推奨されるエンコーディングは UTF - 8 です。
- UTF - 8 は可変長エンコーディングで、すべての Unicode 文字を表現できます。
- ASCII と下位互換性があります。
- HTML、XML、および多くの最新のシステムでデフォルトのエンコーディングとして使用されています。
Java は java.nio.charset.StandardCharsets
クラスを提供しており、このクラスには UTF - 8、UTF - 16、ISO - 8859 - 1 などの標準文字セットの定数が含まれています。
では、ファイルに Unicode テキストを読み書きするプログラムを作成しましょう。
Unicode ファイルライターの作成
-
/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
ファイルを開きます。
-
様々な言語の挨拶が、Unicode 文字で正しく表示されているはずです。
コードの理解
このプログラムは、ファイルで Unicode を扱う際のいくつかの重要なポイントを示しています。
- 明示的なエンコーディング指定:
StandardCharsets.UTF_8
を使用してファイルに書き込むときと読み取るときに、明示的に UTF - 8 エンコーディングを指定しています。これにより、Unicode 文字が正しく保存されます。
- 最新のファイル入出力:
java.nio.file.Files
クラスを使用しており、このクラスは特定の文字エンコーディングでファイルを読み書きする便利なメソッドを提供しています。
- デフォルトのエンコーディング:プログラムはシステムのデフォルトの文字エンコーディングを表示します。これは、オペレーティングシステムやロケール設定によって異なる場合があります。
- 絵文字のサポート:プログラムには絵文字の例 (👋🌍) が含まれており、Java と UTF - 8 が Unicode の補助平面の文字を扱えることを示しています。
ファイルで Unicode を扱う際は、常に以下のことを忘れないでください。
- エンコーディングを明示的に指定する(できれば UTF - 8)
- 読み書きに同じエンコーディングを使用する
- ファイル操作中に発生する可能性のある
IOException
を処理する
- システムのデフォルトのエンコーディングを意識するが、それに依存しない