您可以依靠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