2009-06-29 17 views

答えて

6

ファイル名を調べたり、ディレクトリの場合は内容を再帰的に取得したりすることで、ファイルシステム全体を反復することができます。

問題がコンピュータ上のドライブを取得する方法である場合は、File.listRoots()関数を参照してドライブ文字のリストを取得します。

ETA:

絶対に安全のために、あなたは再帰的な処理に関するいくつかの制限を含めることになるでしょう。シンボリックリンクなどでファイルシステムにループを持たせることは可能です(特にLINUX/UNIXではそうですが、サードパーティのツールでもWindowsでこれを可能にすることができます)。

シンボリックリンクを扱うときにループにならないようにするには、File.getCanonicalPathメソッドを使用してディレクトリの「実際の」パスを取得し、すべての訪問正規のパスを追跡します。また、getCanonicalFileを使用してすべてのファイルを追跡することもできますが、同じファイルを2回処理するときどきのインスタンスを実際に避けたい場合を除き、おそらく必要ありません。

+0

これはlinuxで動作するのだろうか...ドライブはルートではなくルートファイルシステムのフォルダであるので、 –

+1

名前が示すように、メソッドは単にその単一のルートファイルシステムを返します。それはドライブについて何も言わない。 –

+2

無限再帰を作成する可能性のあるリンクを監視します。 @Nuno:はい。マウントされたドライブは、マウントポイントを含むディレクトリが "リストされている"ときに返されます。 – erickson

1

また、再帰処理の例外を忘れないでください。アクセス権の制限により、一部のフォルダにアクセスできない場合があります。また、Windowsシステムフォルダ "System Volume Information"はWindowsエクスプローラに入力することができませんので、プログラマチックに入ると例外がスローされます。

0

あなたは、ファイルシステム全体を通じて再帰呼び出しを使用することができます。

  1. listRoots():あなたはjava.io.Fileの次の方法を使用することができますMac OS Xで、Windowsでは、それはドライブです(ルートファイルを一覧表示し、それは '/'です)。

  2. listFiles():あなたのように

    File file = new File("/"); //root 
    

    :あなたは、ファイルやディレクトリを見ているかどうかを判断するためにFileオブジェクトを使用することができます

2

ディレクトリの囲みファイルを一覧表示あなたの好みに応じて再帰的に繰り返されます(またはあなたの好みに応じて繰り返します)。

if(tempFile.isDirectory()) 
    //do recursive call on that directory 
else 
    //perform check on file name 
関連する問題