5

クラスパスに特定の名前のすべてのファイルをリストしたい。複数回発生することが予想されるため、機能しClass.getResource(String)ません。

基本的に、クラスパスの任意の場所で特定の名前(例:xyz.properties)を持つすべてのファイルを識別し、それらのメタデータを累積的に読み取る必要があります。

何か効果が欲しいのですが、Collection<URL> Class.getResources(String)似たようなものが見つかりませんでした。

PS:サードパーティのライブラリを使用する余裕がないため、自家製のソリューションが必要です。

4

2 に答える 2

4

クラスローダーでEnumeration getResources(String name)を使用して、同じことを実現できます。

例えば:

Enumeration<URL> enumer = Thread.currentThread().getContextClassLoader().getResources("/Path/To/xyz.properties");
while (enumer.hasMoreElements()) {
    System.out.print(enumer.nextElement());
}
于 2012-10-09T13:34:10.827 に答える
2

私がしていることは、クラスパスからJavaソースファイルを読み取り、ClassLoaderを使用してそれらを処理することです。私は次のコードを使用しています:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

assert (classLoader != null);

// pkgName = "com.comp.pkg"
String path = pkgName.replace('.', '/');

// resources will contain all java files and sub-packages
Enumeration<URL> resources = classLoader.getResources(path);

 if(resources.hasMoreElements()) {
        URL resource = resources.nextElement();     
        File directory = new File(resource.getFile());
        // .. process file, check this directory for properties files
 }

これがお役に立てば幸いです。

于 2012-10-09T13:35:13.653 に答える