Опираясь на кодировку по умолчанию, что я должен использовать и почему?
FindBugs сообщает об ошибке:
Опора на кодировку по умолчанию Обнаружен вызов метода, который будет выполнять преобразование байта в строку (или строку в байт), и будет предполагать, что кодировка платформы по умолчанию подходит. Это приведет к изменению поведения приложения на разных платформах. Используйте альтернативный API и укажите имя набора символов или объект Charset явно.
Я использовал FileReader вот так (просто кусок кода):
public ArrayList<String> getValuesFromFile(File file){
String line;
StringTokenizer token;
ArrayList<String> list = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(file));
list = new ArrayList<String>();
while ((line = br.readLine())!=null){
token = new StringTokenizer(line);
token.nextToken();
list.add(token.nextToken());
...
Чтобы исправить ошибку, мне нужно изменить
br = new BufferedReader(new FileReader(file));
в
br = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charset.defaultCharset()));
И когда я использую PrintWriter, такая же ошибка произошла. Так что теперь у меня есть вопрос. Когда я могу (должен) использовать FileReader и PrintWriter, если это не хорошая практика, полагаться на кодировку по умолчанию? И второй вопрос - правильно использовать Charset.defaultCharset ()? Я решил использовать этот метод для автоматического определения кодировки ОС пользователя.