Файловый ввод-вывод с кодировкой по умолчанию на явные StandardCharsets
Используйте читатели и писатели Files с константами StandardCharsets вместо поведения кодировки платформы по умолчанию и поиска по имени кодировки.
Сравнение кода
✕ 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, буферизация и кодировка выражены в одной операции.
Старый подход
Кодировка платформы по умолчанию
Современный подход
Явная стандартная кодировка
Начиная с JDK
7
Сложность
Начинающий
Поддержка JDK
Файловый ввод-вывод с кодировкой по умолчанию на явные StandardCharsets
Доступно
Широко доступно с JDK 7 (июль 2011)
Как это работает
Конструкторы Reader и Writer, которые полагаются на кодировку по умолчанию, делают поведение файла зависимым от среды выполнения. Files.newBufferedReader() и newBufferedWriter() принимают явную Charset, а StandardCharsets предоставляет гарантированные константы, такие как UTF_8, без поиска по строке или UnsupportedCharsetException.
Связанная документация
Доказательство