1. ホーム
  2. java

[解決済み] jarファイルからリソースフォルダ内のフォルダにアクセスするには?

2022-04-28 21:13:27

質問

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

解決方法は?

やっと、解決策が見つかった。

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ファイルでは動作しません)ので、それが気に入らない場合は削除してください。