2009-04-16 6 views
4

私はjavaからフォルダ/ディレクトリを検索し、javaのフォルダ/ディレクトリに行きたいと思っています。私はシステムユーティリティと呼ばれると思いますか?そこにあるチュートリアルや、そのテーマに関する本?ファイルシステムでJavaを使って歩く方法

ありがとう;)

答えて

9

このコードを使用して、フォルダ内のすべてのZIPファイルを取得します。これを再帰的に呼び出すと、ファイルオブジェクトが何度もサブディレクトリになるかどうかがチェックされます。あなたは、ファイルシステムをナビゲートFileを見て、リスト()メソッドを取りたい場合は

public List<String> getFiles(String folder) { 

List<String> list = new ArrayList<String>(); 
     File dir = new File(folder); 
     if(dir.isDirectory()) { 
      FileFilter filter = new FileFilter() { 

       public boolean accept(File file) { 
        boolean flag = false; 
        if(file.isFile() && !file.isDirectory()) { 
         String filename = file.getName(); 
         if(!filename.endsWith(".zip")) { 
          return true; 
         } 
         return false; 
       } 

      }; 
      File[] fileNames = dir.listFiles(filter); 
      for (File file : fileNames) { 
       list.add(file.getName()); 
      } 
      return list; 

}

+0

なぜFileオブジェクトの代わりにStrings /ファイル名を使用していますか? –

+0

上記のコードサンプルでは、​​我々は、フォルダ内のすべてのZIPファイルのファイル名のみを生成するために必要な、したがって、それは文字列としてそれを維持し、健全性チェックのためのWebサービスにそれを渡すために、より多くの意味を成していた私のモジュールのの一つからです。これにより、フットプリントを低く抑えることができました。 – sangupta

0

java.io.Fileクラスを使用して検索することができます。

2

。ほとんどの場合、階層をナビゲートするために再帰的なメソッドが必要になります。

1

私はその特定の科目に関するチュートリアルや本は知らないが、それを行う方法はjava.io.Fileクラスを使用することです。たとえば、list()を使用して、ディレクトリの内容のリストを取得できます。次に、isDirectory()を使用して再帰的にファイルツリー全体を検索するだけです。

5

Apache Commons FileUtils(詳しくはhttp://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.htmlを参照)を使用することができます。具体的には、これを再帰的に実行してフィルタを使用できるlistFilesメソッドを使用できます(再帰の書き込みを自分で保存し、

for (File file : File.listRoots()[0].listFiles()) { 
     System.out.println(file); 
    } 

同じ、印刷ディレクトリのみ:

FileFilter isDirectory = new FileFilter() { 

     public boolean accept(File pathname) { 
      return pathname.isDirectory(); 
     } 
    }; 

    for (File file : File.listRoots()[0].listFiles(isDirectory)) { 
     System.out.println(file); 
    } 
1

私はApache Commons VFSを使用しました。子どもたちは、ファイル、フォルダ、またはgetType()と別の何かである場合

FileSystemManager fsManager = VFS.getManager(); 
FileObject path = fsManager.resolveFile("file:///tmp"); 

FileObject[] children = path.getChildren(); 
System.out.println("Children of " + path.getName().getURI()); 
for (int i = 0; i < children.length; i++) 
{ 
    System.out.println(children[ i ].getName().getBaseName()); 
} 

あなたがチェックできます。

はこのように、ディレクトリの読み取り内容のためにそれを使用していいです。

と同じコードがちょうどresolveFile as you can see hereのURLを変更... ZIPまたはJARファイル、FTP、SFTPを読み取るために働きます。

関連する問題