- 一つのディレクトリ* .xmlファイル、* .TXT、*のtest.CSV よう
- つまたは複数のパターン 再帰スキャンのための
- スイッチ
私は最善の方法は、このようなものになるだろうと思う:
public class FileScanningTest {
public static void main(String[] args) throws IOException {
String directory = "C:\\tmp\\scanning\\";
String glob = "**/*.xml";
Boolean rekursiv = false;
final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher("glob:"+glob);
Files.walkFileTree(Paths.get(directory), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
if (pathMatcher.matches(path)) {
System.out.println(path);
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
}
}
なぜ私は実際のパターンの前に "** /"を入れなければならないのか分かりません。また、スキャンを再帰的にします。 ** /を削除すると、アプリケーションはもう何も見つけられません。
https://docs.oracle.com/javase/tutorial/essential/io/fileOps.html#globは、再帰的であることを示していますが、削除しても機能しないのはなぜですか?
誰かが私にヒントを与えることができますか?
みんなありがとうとは、素敵な週末に
*
と
**
の違いは
*
は、ディレクトリの区切りを(
/
か
\
は、お使いのOSによって異なります)と一致しないことである
ありがとうございます。これはWindowsプラットフォームでも機能します。 しかし再帰スキャンを無効にするにはどうすればよいですか?再帰スキャンを無効にするオプションがあります。同時にいくつかの異なるパターンを持つ方法がありますか? – Hauke
@ Haukeはい。再帰スキャンを無効にするには、ユーザーからのオプションが必要です。 'args [0]'であり、正規表現でいくつかの異なるパターンを使うことができます。私はあなたを見せたり、新しい質問をすることができます。あなたの仕様に従って投稿したコードを更新できます。私はまた、これがJavaでどのように行われているかを学ぶのが好きです(私はC言語で多くしています)。 –
あなたのコードを更新することができればそれは素晴らしいでしょう。これは単なるテストクラスで、アプリケーションの引数を解析するのではなく、 "再帰的"なブールフラグを付けても問題ありません。あなたの助けをありがとう – Hauke