3

だから私はタンパク質データベース上の特定の情報を見つけるコードを書いています。再帰的なフォルダ検索がこれらのファイルを見つけるための最良の方法であることを私は知っていますが、私はこの言語に非常に慣れておらず、Javaで書くように言われています(私は通常C ++を行います)

そうは言っても、私はどのような方法を使用しますか?

1番目:デスクトップでフォルダーを見つけます
2番目:各フォルダーとそのフォルダーのサブフォルダーを開きます
3番目:「。dat」タイプで終わるファイルを見つけます(これらはタンパク質情報を保存している唯一のファイルであるため)

あなたが提供できるありとあらゆる助けをありがとう

4

4 に答える 4

15
  1. java.io.Fileは、「ファイルとディレクトリのパス名の抽象表現」です。
  2. File.listFilesは、ディレクトリ内に含まれるすべてのファイルのリストを提供します(Fileオブジェクトがディレクトリを表す場合)
  3. File.listFiles(FileFilter)は、ニーズに基づいてファイルリストをフィルタリングする機能を提供します

だから、その情報で...

次のようなパスの場所を指定します...

File parent = new File("C:/path/to/where/you/want");

Fileが次のディレクトリであることを確認できます...

if (parent.isDirectory()) {
    // Take action of the directory
}

ディレクトリの内容を一覧表示するには...

File[] children = parent.listFiles();
// This will return null if the path does not exist it is not a directory...

同様の方法でリストをフィルタリングできます...

File[] children = parent.listFiles(new FileFilter() {
        public boolean accept(File file) {
            return file.isDirectory() || file.getName().toLowerCase().endsWith(".dat");
        }
    });
// This will return all the files that are directories or whose file name ends
// with ".dat" (*.dat)

他の有用な方法には、以下が含まれます(ただしこれらに限定されません)

于 2012-09-29T21:23:17.453 に答える
8

このような何かがトリックを行います:

public static void searchForDatFiles(File root, List<File> datOnly) {
    if(root == null || datOnly == null) return; //just for safety   
    if(root.isDirectory()) {
        for(File file : root.listFiles()) {
            searchForDatFiles(file, datOnly);
        }
    } else if(root.isFile() && root.getName().endsWith(".dat")) {
        datOnly.add(root);
    }
}

このメソッドが戻った後、List<File>渡されたものは、ディレクトリの.datファイルとすべてのサブディレクトリ(私が間違っていない場合)で埋められます。

于 2012-09-29T21:29:25.980 に答える
2

JavaAPIを確認する必要がありFileます。特に、listFilesメソッドFileFilterを調べて、ディレクトリと、もちろん、関心のあるファイルを選択する書き込みを行う必要があります。

条件に一致するすべてのファイルを返すメソッドは次のとおりです(実装している場合FileFilter)。

List<File> searchForFile(File rootDirectory, FileFilter filter){
    List<File> results = new ArrayList<File>();
    for(File currentItem : rootDirectory.listFiles(filter){
      if(currentItem.isDirectory()){
          results.addAll(searchForFile(currentItem), filter)
      }
      else{
          results.add(currentItem);
      }
    }
    return results;
}
于 2012-09-29T21:31:30.597 に答える
1

再帰的なフォルダ検索を使用し、関数endsWith()を使用して.batファイルを見つけたら、任意のString関数を使用して必要な情報を見つけることができます。

于 2012-09-29T21:24:34.397 に答える