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