プロジェクトのルートにリソース フォルダー/パッケージがあり、特定のファイルをロードしたくないと思っています。特定のファイルをロードしたい場合は、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 ファイルではない) にのみ機能します。気に入らない場合は削除できます。