你 可以 依靠
new FileInputStream(fileName).available(),如果指定的文件是空回零。
您 不能 依赖
new FileInputStream(fileName).available() ==0该文件为空的确定测试。如果
fileName是本地文件系统上的常规文件,则可能会起作用。但是,如果
fileName是设备文件,或者如果它是远程文件系统上的文件,则
available()可能返回零以报告a
read()必须阻塞一段时间。(或者如果是远程文件系统,则可能不是。)
测试常规文件长度的一种更可靠的方法是使用
new File(fileName).length() ==0。但是,对于设备文件或管道,
length()无论最终可以读取的字节数如何,调用都可能返回零。请记住,
newFile(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。



