3

クラスパスに次のようなリソースのコレクションがあります。

com/example/foo
    r1.txt
    r2.txt
    r3.txt
    bar/
      b1.txt
      b2.txt
      baz/
       x.txt
       y.txt

このパッケージは WEB-INF lib にあるクラスパス上にあることを知っています。com.example.foo から始まるクラスパスをトラバースして、すべての .txt ファイルを探したいと考えています。次のような関数を siganutre で呼び出します。

リスト ファイル = findFiles("com/example/foo","*.txt");

私はSpring 3.1を使用しているので、Springの一部であるメソッドを喜んで使用します。

更新: 以下の Spring ベースの @jschoen 提案を使用したソリューション:

PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath:com/example/foo/**/*.txt");

スプリングは ant スタイル パターンを使用して一致するため、ダブル ** が必要です

4

1 に答える 1

2

私が間違っていなければ、 Reflections ライブラリを使用できます。

public static void main(String[] args) {
    Reflections reflections = new Reflections(new ConfigurationBuilder()
    .setUrls(ClasspathHelper.forPackage("your.test.more"))
    .setScanners(new ResourcesScanner()));

    Set<String> textFiles = reflections.getResources(Pattern.compile(".*\\.txt"));

    for (String file : textFiles){
        System.out.println(file);
    }
}

どのパッケージを入れるかは問題ではありません。最初に 1 つのパッケージが必要なだけで、他のすべてのパッケージが検出されます。

編集: また、Spring で使用できるPathMatchingResourcePatternResolverがあるようです。パス・ザ・パターンを使用でき、同じように機能するgetResources(String locationPattern)と思います。".*\\.txt"私がいるところにSpringのセットアップがないか、自分でテストしたでしょう。

于 2012-10-30T17:53:32.673 に答える