FileReader始终至少读取一个换行符,尽管Java中的文件中没有换行符

FileReader始终至少读取一个换行符,尽管Java中的文件中没有换行符,java,file,filereader,Java,File,Filereader,我有这个密码 try{ FileReader fread = new FileReader(new File("testfile")); int y = 0; while (fread.ready()){ char path = (char)fread.read(); System.out.println(path); if (path == '\n'){ y++; } }

我有这个密码

try{
    FileReader fread = new FileReader(new File("testfile"));
    int y = 0;
    while (fread.ready()){
        char path = (char)fread.read();
        System.out.println(path);
        if (path == '\n'){
            y++;
        }
    }
    System.out.println("Newlines: " + y);
}
catch (Exception e){
    System.out.println(e.getMessage());
}
…和一个名为testfile的文件,其中包含以下信息

ABC
…当我运行程序时,它会打印出文件包含一个换行符。为什么呢?阅读了Oracle文档后,我根本找不到原因。通过从y中减去一,我的问题很容易解决,但我对此并不满意。这个问题让我发疯,因为我不知道新行是从哪里来的。

(代表OP发布)

我的编辑器(和其他几个编辑器)在文件中的eof之后添加了一个换行符。以下页面列出了针对不同编辑器的不同解决方案:


您确定文件的内容吗?你是怎么产生的?它的长度是3还是4?文件是这样创建的。1.按“ABC”。2.储蓄。3.正在退出。使用哪个编辑器?大多数编辑会在每行后面加上一行结尾。你在哪个操作系统上?你能对文件进行hexdump并检查吗?我正在ubuntu 16.04上使用gedit。谢谢,编辑器在eof之后添加了不可见的换行符。我使用以下gedit命令禁用了它:gsettings set org.gnome.gedit.preferences.editor确保换行符为false