gpt4 book ai didi

java - 扫描仪无法读取文本文件

转载 作者:行者123 更新时间:2023-11-29 03:43:04 25 4
gpt4 key购买 nike

我有一堆 .txt 文件正在尝试阅读,但其中许多文件无法阅读。那些不会阅读的内容似乎以文本前的空白行开头。例如,以下抛出 NoSuchElementException:

public static void main(String[] args) throws FileNotFoundException{
Scanner input = new Scanner(new File("documentSets/med_doc_set/bmu409.shtml.txt"));
System.out.println(input.next());
}

正在读取的文本文件以空行开头,然后是一些文本。我还尝试使用 input.skip("[\\s]*") 跳过任何前导空格,但它会引发相同的错误。有什么办法可以解决这个问题吗?

编辑:file托管在谷歌文档上。如果您下载并在文本编辑器中查看,您可以看到它开头的空行。

最佳答案

在处理输入时,Scanner 类型奇怪地不一致。它吞下 I/O 异常 - 消费者应该 test for these explicitly - 所以在告知读者错误方面是松懈的。但是在解码字符数据时该类型是严格的 - 不正确编码的文本或使用错误的编码将导致引发 IOException,该类型会立即吞下它。

此代码读取带有错误检查的文本文件中的所有行:

  public static List<String> readAllLines(File file, Charset encoding)
throws IOException {
List<String> lines = new ArrayList<>();
try (Scanner scanner = new Scanner(file, encoding.name())) {
while (scanner.hasNextLine()) {
lines.add(scanner.nextLine());
}
if (scanner.ioException() != null) {
throw scanner.ioException();
}
}
return lines;
}

此代码读取行并将解码器不理解的代码点转换为问号:

  public static List<String> readAllLinesSloppy(File file, Charset encoding)
throws IOException {
List<String> lines = new ArrayList<>();
try (InputStream in = new FileInputStream(file);
Reader reader = new InputStreamReader(in, encoding);
Scanner scanner = new Scanner(reader)) {
while (scanner.hasNextLine()) {
lines.add(scanner.nextLine());
}
if (scanner.ioException() != null) {
throw scanner.ioException();
}
}
return lines;
}

这两种方法都需要您提供 encoding明确地而不是依赖 default encoding这通常不是 Unicode(另请参阅 standard constants。)

代码是 Java 7 语法并且未经测试。

关于java - 扫描仪无法读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com