File.isFile()
和File.isDirectory()
不仅在File
不是指定类型时返回false,而且在文件系统上不存在File
时也返回false。如何确定File
表示文件或目录何时不存在?
答案 0 :(得分:10)
通常,特定路径可以表示目录和文件。在该路径中创建目录或文件之前,它对于其中一个或另一个的概念是无效的。
但是有一个特例。如果路径以路径分隔符结束(在类Unix系统上为'/',在Windows上为'\',在其他系统上可能完全不同),那么至少在类Unix系统上,路径不能是文件的路径。我不知道这对所有系统是否有效。
答案 1 :(得分:6)
你的问题就像问这个:
“如果这个盒子里面只有一只猫或一只狗,我该怎么知道?”
从表面上看,这个问题是荒谬的,你的也是如此。如果文件是路径是指不存在的文件系统对象(即“无”),则询问“无”>>是否<<文件或目录毫无意义。这显然不是。
具体而言,在以下所有谓词的任何时刻都有:
file.exists() == false IMPLIES
file.isDirectory() == false AND file.isFile() == false
file.isDirectory() == true OR file.isFile() == true IMPLIES
file.exists() == true
file.isDirectory() == true IMPLIES
file.isFile() == false
file.isFile() == true IMPLIES
file.isDirectory() == false
答案 2 :(得分:4)
你不能
该文件必须首先存在才能知道 IS (我明白如果文件不存在,它还没有)
javadoc在两种情况下均表示:
当且仅当此抽象路径名表示的文件存在和[...]
时才显示
一个尚不存在的文件可能都是潜在的。
答案 3 :(得分:2)
我认为答案是你不能。部分原因是它不存在。其余的原因与Java的系统独立性有关。根据您运行的操作系统,文件和目录之间没有实际区别。例如,在UNIX中,一切都是文件。管道,目录,链接 - 它们都是技术上的文件。
就目前而言,File对象引用的抽象路径名可以是一个 - 直到您对其执行mkdir()
或createNewFile()
。
答案 4 :(得分:0)
首先测试File.exists()。
伪代码(因为我不做Java :)):
If File.Exists()
{
If File.isFile()
{
bIsFile = true;
}elseif File.isFolder()
{
bIsFolder = true;
}else
{
//Handle error condition here
}
}else
{
//It does not exist. Handle that here if you care to
}