Опираясь на кодировку по умолчанию, что я должен использовать и почему?

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 ()? Я решил использовать этот метод для автоматического определения кодировки ОС пользователя.

Ответы на вопрос(4)

Ваш ответ на вопрос