如果File不是文件或目录,如何找出它?

时间:2009-08-14 18:27:07

标签: java

File.isFile()File.isDirectory()不仅在File不是指定类型时返回false,而且在文件系统上不存在File时也返回false。如何确定File表示文件或目录何时不存在?

5 个答案:

答案 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
}