Почему мой java.util.Scanner не читает мой файл? - PullRequest
0 голосов
/ 08 января 2019

мой сканер не читает мой существующий файл, который читается BufferedReader, но BufferedReaders не поддерживает кодировку UTF-8, которая нужна моему файлу.

Я уже использовал BufferedReader (даже с UTF-8, который не давал мне такие буквы, как «ä» (немецкая буква), но вместо этого давал мне неудобные символы вопросительного знака). И я, конечно, уже использовал сканер.

public ArrayList<String> getThemefile2() {
    Scanner s;
    try {
        s = new Scanner(themefile);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        return new ArrayList<>();
    }
    ArrayList<String> list = new ArrayList<>();
    while (s.hasNextLine()) {
        list.add(s.nextLine());
    }
    s.close();
    return list;
}

Он просто возвращает пустой ArrayList, но не вызывает исключение FileNotFoundException. Файл темы - это существующий файл.

Ответы [ 4 ]

0 голосов
/ 29 января 2019

У меня была такая же проблема с уровнем API 28. Это сработало для меня:

s = new Scanner(new FileReader(themefile));

и должен импортировать:

import java.io.FileReader;
0 голосов
/ 08 января 2019

Без файла, на который мы можем посмотреть, мы все только догадываемся о проблеме.

Вот одно предположение: следующей строки нет, поэтому цикл while немедленно прерывается, и вы получаете пустой массив. Это будет иметь место, если в текстовом файле вообще нет новой строки.

0 голосов
/ 08 января 2019

Если вы используете Java 8+, я бы рекомендовал использовать Files#lines метод:

try (Stream<String> stream = Files.lines(themeFile.toPath())) {
    stream.collect(Collectors.toList()); //need to be stored in a variable.
} catch (IOException e) {
    e.printStackTrace();
}

Documentations:

0 голосов
/ 08 января 2019

Вам необходимо указать кодировку для файла, если она отличается от используемой по умолчанию в вашей системе. В вашем случае это будет то, где вы создадите Scanner.

s = new Scanner(themefile, "UTF-8");
...