Java IO 无法读取文本文件

标签 java file-io java.util.scanner

当我尝试读取 thesaurus.txt 时,它会将其读为“ÿþ”,尽管第一个条目是“<pat>a cappella”。可能是什么原因造成的?

    File file = new File("thesaurus.txt");
    Scanner scan;
    try {
        scan = new Scanner(file);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        scan = null;
    }
    String entry;
    ArrayList<String> thes = new ArrayList<String>();
    while(scan.hasNext())
    {
        entry = scan.nextLine();
        if(entry != "")
        {
             thes.add(entry);
        }
    }
    return thes;

最佳答案

Yout 输入文件可能是一个以 byte order mark 开头的 UTF-16 (LE) 文件。 .

如果您查看此文件,就好像它是 ISO 8859-1您将看到这两个字符:ÿþ,在该字符编码中具有代码 FFFE,这正是存在 UTF-16 BOM 时您所期望的。

读取文件时应显式指定字符编码,而不是依赖系统的默认字符编码:

scan = new Scanner(file, "UTF-16");

关于Java IO 无法读取文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638582/

相关文章:

windows - 具有部分对象(CreateFileMapping)的 I/O 是否比基本 api(Read/WriteFile)更快?

java - 从字符串(使用 Scanne.next() 从文件中获取)中修剪/删除不需要的简单值,以使用 Double.parseDouble() 解析 double

java - 我怎样才能以最佳性能进行过滤? (Java)

java - 如何从请求中获取excel文件?

c++ - C++ 有没有像 getdelim 这样的函数?

JavaFX 部署 - 图像丢失

c# - 替换文本文件中的一行

java - 为什么 scan.nextFloat() 不只读取浮点值?

java - Threadlocal 用于初始化 java web 项目中的变量

java - 通话期间使用设备麦克风