【问题标题】:Why does my java.util.Scanner not read my File?为什么我的 java.util.Scanner 不读取我的文件?
【发布时间】:2019-01-07 22:14:58
【问题描述】:

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

【问题讨论】:

  • 您是否调试/添加了打印语句以查看代码发生了什么?是否进入了while循环?
  • BufferedReader 当然支持 UTF-8 文本。
  • 当然没有进入while循环,因为返回的ArrayList的大小为0
  • 在您的 catch 块中,您还返回一个空的 List。你确定没有打印错误信息吗?
  • 是的。根本没有错误信息

标签: java file java.util.scanner


【解决方案1】:

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

文档:

【讨论】:

  • 这个也抛出以下错误:java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1
  • @Marlon 检查this 以解决异常。
【解决方案2】:

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

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

【讨论】:

  • 这不是我的问题。我的问题是,它在我的文件中找不到任何行
  • 好的,如果你在做其他事情之前检查themefile.exists()会发生什么?您可能只是在themefile 中找到了错误的路径。
  • 不,因为当我将完全相同的文件与 BufferedReader 一起使用时,它可以工作
  • 您的问题可能是由错误的文件名、无法读取的文件或使用错误的编码引起的。你真的尝试过我的解决方案吗?
【解决方案3】:

没有要查看的文件,我们都只是在猜测问题。

这里有一个猜测:没有下一行,因此 while 循环立即中断,你得到一个空数组列表。如果文本文件中根本没有换行符,就会出现这种情况。

【讨论】:

  • 我应该在网站上上传我的文件吗?
【解决方案4】:

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

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

并且必须导入:

import java.io.FileReader;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    相关资源
    最近更新 更多