这个FileInputStream.available()javadoc说:
返回可以从此输入流中读取(或跳过)的剩余字节数的估计值,而不会被下一次调用此输入流的方法阻塞.下一次调用可能是同一个线程或另一个线程.单个读取或跳过这么多字节不会阻塞,但可以读取或跳过更少的字节.
在某些情况下,非阻塞读取(或跳过)可能在其速度很慢时似乎被阻止,例如在通过慢速网络读取大型文件时.
我不确定在这张支票中是否:
if (new FileInputStream(xmlFile).available() == 0)
Run Code Online (Sandbox Code Playgroud)
我可以依赖那些空文件总是返回零吗?
-
谢谢@SB,他没有完全回答这个问题,但却是第一个给出最佳选择的人:
如果xmlFile是java.io.File对象,则可以使用length()方法获取其大小.
如果指定的文件为空,您可以依赖返回零。new FileInputStream(fileName).available()
您不能依赖new FileInputStream(fileName).available() == 0该文件为空作为最终测试。如果fileName是本地文件系统上的常规文件,它可能会起作用。但如果fileName是设备文件或者远程文件系统上的文件,则available()可能会返回零以报告 aread()将必须阻塞一段时间。(或者在远程文件系统的情况下,可能不会。)
测试常规文件长度的更可靠方法是使用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(...);
}
}
Run Code Online (Sandbox Code Playgroud)
但强烈建议您在运行应用程序的所有平台上使用各种“文件”类型仔细测试这一点。某些文件谓词的行为被记录为特定于平台;请参阅javadoc。
| 归档时间: |
|
| 查看次数: |
5612 次 |
| 最近记录: |