jar ファイル内からリソース フォルダー内のフォルダーにアクセスするにはどうすればよいでしょうか? 質問する

jar ファイル内からリソース フォルダー内のフォルダーにアクセスするにはどうすればよいでしょうか? 質問する

プロジェクトのルートにリソース フォルダー/パッケージがあり、特定のファイルをロードしたくないと思っています。特定のファイルをロードしたい場合は、class.getResourceAsStream を使用すれば問題ありません。実際にやりたいのは、リソース フォルダー内に「フォルダー」をロードし、そのフォルダー内のファイルをループして各ファイルへのストリームを取得し、コンテンツを読み込むことです...ファイル名は実行前に決定されないと仮定します...どうすればよいでしょうか? jar ファイル内のフォルダー内のファイルのリストを取得する方法はありますか? リソースを含む Jar ファイルは、コードが実行されている Jar ファイルと同じであることに注意してください...

ベストアンサー1

ついに解決策を見つけました:

final String path = "sample/folder";
final File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());

if(jarFile.isFile()) {  // Run with JAR file
    final JarFile jar = new JarFile(jarFile);
    final Enumeration<JarEntry> entries = jar.entries(); //gives ALL entries in jar
    while(entries.hasMoreElements()) {
        final String name = entries.nextElement().getName();
        if (name.startsWith(path + "/")) { //filter according to the path
            System.out.println(name);
        }
    }
    jar.close();
} else { // Run with IDE
    final URL url = Launcher.class.getResource("/" + path);
    if (url != null) {
        try {
            final File apps = new File(url.toURI());
            for (File app : apps.listFiles()) {
                System.out.println(app);
            }
        } catch (URISyntaxException ex) {
            // never happens
        }
    }
}

2 番目のブロックは、IDE でアプリケーションを実行する場合 (jar ファイルではない) にのみ機能します。気に入らない場合は削除できます。

おすすめ記事