2009-08-14 30 views
8

File.isFile()およびFile.isDirectory()は、Fileが指定されたタイプでない場合だけでなく、File自体がファイルシステム上に存在しない場合もfalseを返します。存在しない場合、Fileがファイルまたはディレクトリを表すかどうかをどのように判断できますか?ファイルが存在しない場合、ファイルまたはディレクトリであるかどうかを調べるにはどうすればよいですか?

答えて

10

、特定のパスには、ディレクトリとファイルの両方を表すことができます。そのパスに作成されたディレクトリまたはファイルが存在するまで、どちらか一方のためのものであるという概念は無効です。

ただし、特別な場合があります。パスがパス区切り文字(Unixライクなシステムでは '/'、Windowsでは '\'、他のシステムではまったく違うもの)で終わると、少なくともUnixライクなシステムではパスはファイルのパスになり得ません。私はこれがすべてのシステムで有効かどうかはわかりません。

0

Test File.exists()first。

擬似コード(:)私は、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 
} 
+1

しかし、私は、それはdoesnの場合は、ファイルまたはまたは*それが存在しているではない*かどうかのディレクトリ... –

+1

のかどうか知りたい:

具体的には、任意の瞬間における次の述語のすべてを保持します魚も鳥もない - それは何もない。 –

+0

EBGreen、私は今までに最も複雑なスマイリー/かっこのやりとりの賞を獲得したと思います! :o) –

3

あなたはjavadocは両方で述べていない

ファイル必見はそれが何であるかを知っているために、最初に存在している(私はファイルが存在しない場合、それはまだ何もないことを理解し)

することができます例:

この抽象パス名 が示すファイルがと[...]

が存在する場合に限り、

まだ存在しないファイルが両方とも潜在的に存在する可能性があります。

2

私は答えができないと思います。理由の一部は、それが存在しないということだけです。残りの理由は、Javaのシステム独立性と関係しています。実行しているオペレーティングシステムによっては、実際にはファイルとディレクトリの間に違いはありません。たとえば、UNIXではすべてがファイルです。パイプ、ディレクトリ、リンク - 技術的にはすべてファイルです。

Fileオブジェクトが参照する抽象パス名は、mkdir()またはcreateNewFile()のいずれかを実行するまで、1つでもかまいません。

5

あなたの質問はこれを尋ねるようなものです:

「このボックスは、それが空である猫や犬が含まれている場合、どのように私が言うことができます?」

この問題については、この質問は無意味であり、それもあなたのものです。ファイルがパスである場合、存在しないファイルシステムオブジェクトを参照する(すなわち「何もしない」)場合、その「何もない」>>が< <であるかどうかを尋ねるファイルまたはディレクトリは無意味である。それは明らかにどちらもない。

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 
関連する問題