Java BufferedReader读取一个空txt文件,但不';t返回空值

Java BufferedReader读取一个空txt文件,但不';t返回空值,java,utf-8,bufferedreader,Java,Utf 8,Bufferedreader,我尝试使用Java BufferedReader读取一个空的txt文件 这是我的密码: File recentFile = new File(path); try { BufferedReader reader = new BufferedReader(newInputStreamReader(newFileInputStream(recentFile), "UTF-8")); String temp = reader.readLi

我尝试使用Java BufferedReader读取一个空的txt文件

这是我的密码:

    File recentFile = new File(path);
    try {
            BufferedReader reader = new BufferedReader(newInputStreamReader(newFileInputStream(recentFile), "UTF-8"));
            String temp = reader.readLine();
            reader.close();
            if (temp == null) {System.out.println("your file is empty");}
            else {System.out.println(temp);}
    } catch (IOException ex) {}
txt文件完全为空,但当我运行程序时,命令提示符会打印出“?”而不是“您的文件为空”

当我将“UTF-8”更改为“Unicode”,并将我的txt文件编码格式更改为Unicode时,我会从提示中得到一个“your file is empty”

为什么我在使用UTF-8时会得到这个结果


顺便说一句,如果这是一个重复的请让我知道,我试图在谷歌上搜索多次,但找不到任何对我有用的东西。

文件不是完全空的;这是唯一的解释。最有可能的是在开始处有一个字节顺序标记。这看起来不像一个字符(如果你在记事本中打开文件,它可能会显示为完全空的),但它确实很重要

请注意,我相信BR在开始返回null之前可能首先返回1个空字符串;然而,这里并不是这样的(如果是这样的话,你就不会看到你的程序打印

您可以使用十六进制编辑器检查存在的实际字节。或者,这段java代码将告诉您:

try(var in=newfileinputstream(“/path/to/the/file”)){
for(int c=in.read();c!=-1;c=in.read()){
系统输出打印(“%02X”,c&0xFF);
}
}
System.out.println();

。。。else if(temp.isEmpty(){System.out.println(“您的文件为空”);}else..
;)抱歉,我仍然得到相同的结果…我假设您在windows计算机上,并且可能有这个“讨厌的windows-BOM-UTF-8”?您确定该文件真的是完全空的吗?它的大小是多少字节?尝试使用十六进制编辑器查看其内容编辑:请参阅前面的注释(如果
temp
不是
null
,请将其内容打印为十六进制(或字节)),