2011-08-03 21 views
3

java.io.FileオブジェクトAとBがあります(Aはディレクトリ、Bはファイルを表します)。 Bは絶対パスでも、Aより0レベル以上低い相対パスでもかまいません.BがAに含まれているかどうかを判断する最も効率的な方法は何ですか?ディレクトリにファイルが含まれているかどうかを確認する

例えば、

AはC:\ユーザー\紙幣\デスクトップ\ ABCの\のXYZ123及びBは、C:\ユーザー\ボブ\ドキュメント\ INC \

又は

data.inc

Aは、C:\ Users \ユーザー法案\デスクトップ\ ABCの\のXYZ123とBはC:\ Users \ユーザーボブ\ドキュメント\ X1 \ Y1 \ INC \

または

data.inc Aは、C:\ Users \ bill \ Desktop \ abc \ xyz123、Bは.. \ .. \ .. \ Documents \ inc \ data.inです。あなたがチェックしたい場合はBが1つ以上のレベルA未満であれば、それはだまで、ちょうどParentFileを得続ける:あなたはAが

A.equals(B.getParentFile()) 

編集を実行して、Bの親であるかどうかを確認することができ、C

+3

宿題のような匂い... –

+7

さあ、お元気ですか。それは 'File' API - [' getParentFile() '](http://download.oracle.com/javase/6/docs)にあります。 /api/java/io/File.html#getParentFile())。 – mre

+1

あなたが立ち往生したときではなく、始める前に、このサイトをどこかにあると考えてください。 – aevanko

答えて

13

Aまたはnull

File C = B.getParentFile(); 

while(C != null) { 
    if(A.equals(C)) 
     return true; 

    C = C.getParentFile(); 
} 

return false; 
0

getParentFile()、親ディレクトリを返し、getCanonicalFile()は使用のものとすることができます。そうですね:

File bDir = b.getParentFile(); 
boolean same = bDir.equals(a) || bDir.getCanonicalFile().equals(a.getCanonicalFile()); 

パスは難しいかもしれません。運が良ければ、ちょうどgetParent()が必要です。 getCanonicalFile()を使用すると、より複雑なケースをカバーする必要があります。

0

は、クラスのfileutilsを使用します。

public static boolean directoryContains(File directory, 
             File child) 
           throws IOException 

は、親ディレクトリが子要素(ファイルまたはディレクトリ)が含まれているかどうかを決定します。