Ответ 1
По умолчанию Scanner использует кодировку символов по умолчанию для платформы, это может не соответствовать кодировке символа файла. JavaDoc утверждает:
Создает новый сканер, который производит значения, отсканированные из указанный файл. Байты из файла преобразуются в символы используя базовую кодировку по умолчанию для платформы.
Сначала определите, какой символ кодирует ваш файл, это можно сделать с помощью утилиты командной строки Linux file -i
. Передайте правильное кодирование в сканер. Java 7 содержит предопределенные константы в java.nio.charset.StandardCharsets для некоторых известных наборов символов.
Scanner file = new Scanner(new File(fileName), StandardCharsets.UTF_8);