クラスパスディレクトリからリソースのリストを取得する 質問する

クラスパスディレクトリからリソースのリストを取得する 質問する

指定されたクラスパス ディレクトリからすべてのリソース名のリストを取得する方法 (メソッドのようなもの) を探していますList<String> getResourceNames (String directoryName)

たとえば、x/y/zファイルa.htmlb.htmlc.htmlおよびサブディレクトリ を含むクラスパス ディレクトリが指定されている場合d、次の文字列を含む がgetResourceNames("x/y/z")返されます。List<String>['a.html', 'b.html', 'c.html', 'd']

ファイルシステムと jar の両方のリソースで機能するはずです。

Files、JarFiles、 sを使って簡単なスニペットを書けることはわかっていますURLが、車輪の再発明はしたくありません。質問は、公開されている既存のライブラリがある場合、 を実装する最も簡単な方法は何ですかgetResourceNames? Spring と Apache Commons スタックはどちらも実行可能です。

ベストアンサー1

カスタムスキャナー

独自のスキャナーを実装します。例:

この解決策の限界についてはコメントに記載されています

private List<String> getResourceFiles(String path) throws IOException {
    List<String> filenames = new ArrayList<>();

    try (
            InputStream in = getResourceAsStream(path);
            BufferedReader br = new BufferedReader(new InputStreamReader(in))) {
        String resource;

        while ((resource = br.readLine()) != null) {
            filenames.add(resource);
        }
    }

    return filenames;
}

private InputStream getResourceAsStream(String resource) {
    final InputStream in
            = getContextClassLoader().getResourceAsStream(resource);

    return in == null ? getClass().getResourceAsStream(resource) : in;
}

private ClassLoader getContextClassLoader() {
    return Thread.currentThread().getContextClassLoader();
}

スプリングフレームワーク

使用PathMatchingResourcePatternResolverSpring Framework から。

ロンマモの反射

他の手法は、CLASSPATH値が大きい場合、実行時に遅くなる可能性があります。より高速な解決策は、ronmamoのリフレクションAPIコンパイル時に検索をプリコンパイルします。

おすすめ記事