您可以依靠new FileInputStream(fileName).available()
如果指定文件为空则返回零。
你不能依靠new FileInputStream(fileName).available() == 0
作为一个明确的测试,该文件是空的。如果fileName
是本地文件系统上的常规文件,它可能会工作。但是,如果fileName
是设备文件,或者如果它是远程文件系统上的文件,则available()
可能返回零来报告read()
必须在一段时间内阻塞。 (或者在远程文件系统的情况下,它可能不是。)
测试常规文件长度的更可靠的方法是使用new File(fileName).length() == 0
。但是对于设备文件或管道,length()
调用可能会返回零,而不考虑最终可以读取的字节数。并且请记住,如果文件不存在,new File(fileName).length()
也会返回零。
编辑如果你想有一个可靠的测试,看看如果一个文件是空的,你必须做出一些电话:
public static isEmptyFile(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
return false;
} else if (file.length() != 0L) {
return false;
} else if (file.isFile()) {
return true;
} else if (file.isDirectory()) {
return false;
} else {
// It may be impossible to tell that a device file/named pipe is
// "empty" without actually reading it. This is not a failing of
// Java: it is a logical consequence of the way that certain
// devices, etc work.
throw new CannotAnswerException(...);
}
}
但是,你会得到很好的建议与各种仔细测试此您运行应用程序的所有平台上的“文件”类型。某些文件谓词的行为被记录为特定于平台;请参阅javadoc。
所以我不能依靠length()?没有可靠的测试? – 2010-05-07 20:17:47