首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >java无法从文件中读取一行

java无法从文件中读取一行
EN

Stack Overflow用户
提问于 2018-10-02 03:54:02
回答 1查看 101关注 0票数 3

我正在读取一个包含以下代码的文件:

代码语言:javascript
复制
 Scanner in = new Scanner(new File(fileName));
    while (in.hasNextLine()) {
        String[] line = in.nextLine().trim().split("[ \t]");
       .
       .
       .
    }

当我使用vim打开文件时,某些行以以下特殊字符开头:

但是java代码不能读取这些行。当到达这些行时,它认为这是文件的末尾,hasNextLine()函数返回false!!

编辑:这是前面提到的(有问题的)行的十六进制转储:

0000000: e280 9c20 302e 3230 3133 3220 302e 3231... 0.20132 0.21 0000010: 3431 392d 302e 3034 0a 419-0.04.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-02 05:17:36

@VGR做对了。

tl;dr:使用Scanner in = new Scanner(new File(fileName), "ISO-8859-1");

似乎正在发生的事情是:

  • 由于唯一0x9C字符,您的文件不是有效的UTF-8。
  • 扫描仪正在以UTF-8格式读取文件,因为这是系统默认的
  • 基础库抛出一个MalformedInputException
  • The扫描仪捕获并隐藏它(这是一个善意但误导的设计决定)
  • 它开始报告它没有更多行

H113除非您实际询问扫描仪H214F215

这是一个MCVE:

代码语言:javascript
复制
import java.io.*;
import java.util.*;

class Test {
  public static void main(String[] args) throws Exception {
    Scanner in = new Scanner(new File(args[0]), args[1]);
    while (in.hasNextLine()) {
      String line = in.nextLine();
      System.out.println("Line: " + line);
    }
    System.out.println("Exception if any: " + in.ioException());
  }
}

下面是一个正常调用的示例:

代码语言:javascript
复制
$ printf 'Hello\nWorld\n' > myfile && java Test myfile UTF-8
Line: Hello
Line: World
Exception if any: null

下面是你所看到的(除了你没有检索和显示隐藏的异常)。请特别注意,没有显示任何行:

代码语言:javascript
复制
$ printf 'Hello\nWorld \234\n' > myfile && java Test myfile UTF-8
Exception if any: java.nio.charset.MalformedInputException: Input length = 1

在这里,当它被解码为ISO-8859-1时,所有字节序列都是有效的(即使0x9C没有指定的字符,因此不会出现在终端中):

代码语言:javascript
复制
$ printf 'Hello\nWorld \234\n' > myfile && java Test myfile ISO-8859-1
Line: Hello
Line: World
Exception if any: null

如果您只对ASCII数据感兴趣,并且没有任何UTF-8字符串,那么您可以简单地通过将其作为第二个参数传递给Scanner构造函数来请求扫描器使用ISO-8859-1

代码语言:javascript
复制
Scanner in = new Scanner(new File(fileName), "ISO-8859-1");
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52597998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档