为什么我的java.util.Scanner无法读取我的文件?

时间:2019-01-07 22:14:58

标签: java file java.util.scanner

我的扫描仪无法读取由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。 themefile是一个现有文件。

4 个答案:

答案 0 :(得分:0)

如果不是系统默认值,则需要指定文件的编码。就您而言,这就是您创建Scanner的地方。

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

答案 1 :(得分:0)

没有文件可供查看,我们都在猜测问题所在。

这是一个猜测:没有下一行,因此while循环立即中断,并且您得到一个空的arraylist。如果文本文件中根本没有换行符,情况就是这样。

答案 2 :(得分:0)

如果您使用的是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();
}

文档:

答案 3 :(得分:0)

我在api 28级别上遇到了同样的问题。 这对我有用:

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

并且必须导入:

import java.io.FileReader;