I/O 初級

デフォルト文字コードのファイルI/Oから明示的なStandardCharsetsへ

プラットフォームのデフォルト文字コードの挙動や文字コード名の検索に頼るのではなく、StandardCharsets定数を使ったFilesのリーダーとライターを使用する。

I/O
✕ Platform-default charset
try (Reader reader = new FileReader(path.toFile())) {
    return readAll(reader);
}
✓ Explicit standard charset
try (BufferedReader reader = Files.newBufferedReader(
        path, StandardCharsets.UTF_8)) {
    return readAll(reader);
}
このコードに問題がありますか? お知らせください。
🌍

移植性のある結果

同じバイト列がどのマシンでも同一にデコードされます。

🔒

定義済み定数

StandardCharsets.UTF_8には文字コード名のスペルミスが入り込みません。

🧩

モダンなファイルAPI

Path、バッファリング、エンコーディングが1つの操作で表現されます。

旧来のアプローチ
プラットフォームのデフォルト文字コード
モダンなアプローチ
明示的な標準文字コード
JDKバージョン
7
難易度
初級
デフォルト文字コードのファイルI/Oから明示的なStandardCharsetsへ
利用可能

JDK 7(2011年7月)以降、広く利用可能

デフォルト文字コードに依存するReaderおよびWriterのコンストラクタは、ファイルの挙動を実行環境に依存させます。Files.newBufferedReader()とnewBufferedWriter()は明示的なCharsetを受け取ることができ、StandardCharsetsは文字列検索やUnsupportedCharsetExceptionなしでUTF_8のような保証された定数を提供します。