Я написал Java-приложение Swing, которое должно найти свои иконки из ресурсов.Поэтому я хочу найти любой PNG в определенной папке в исполняемом файле JAR.Я не знаю раньше, какие имена будут там.
Чтобы найти png внутри папки ресурсов, я использую следующий код:
private List<String> getResourceFolderFileNames(String folder) {
List<String> names = new ArrayList<>();
File jarFile = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getPath());
System.out.println("Folder to search in: " + folder);
try {
if (jarFile.isFile()) {
System.out.println("This is a jar file dir");
JarFile file = new JarFile(jarFile);
Enumeration<JarEntry> entries = file.entries();
List<JarEntry> jarEntries = new ArrayList<>();
while (entries.hasMoreElements()) {
jarEntries.add(entries.nextElement());
}
System.out.println("Number of entries: " + jarEntries.size());
for (JarEntry e: jarEntries
) {
String name = e.getName();
if (name.matches(".*/" + folder + "/[0-9]+\\.png")) {
name = name.split("/")[2];
System.out.println("Added name: " + name);
names.add(name);
}
}
} else {
System.out.println("This is not a jar file");
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("resources/" + folder);
String path = url.getPath();
for (File f: new File(path).listFiles()
) {
names.add(f.getName());
}
}
} catch (Exception e) {
System.out.println(e.getMessage() + "catch in get Resource folder file names");
}
return names;
}
Желаемое поведение кода заключается в том, чтоон вернет список строк, которые являются именами файлов ******. png.
Остальная часть на самом деле еще не работает, но программа никогда не достигает этого.Эта часть предназначена для того, когда вы начинаете поиск в IDE, потому что там, похоже, он работает иначе (указал на некоторые другие вопросы).Кажется, что он не работает на "jarFile.isFile ()".
Ошибка:
Когда я запускаю экспортированный исполняемый файл JAR на Windows или Macэто прекрасно работает.Он делает именно то, что должен делать.Если я запускаю тот же исполняемый файл jar из сетевой папки, он не находит png-файлы.
Структура проекта
Здесь находятся мои значки
--src/
--resources/
--iconfolder1
--iconfolder2
Если мне понадобится дополнительная информация, я сделаю все возможное, чтобы помочь вам помочь мне.Большое спасибо.
edit 1:
Теперь он снова работает в IDE, но по-прежнему не работает в сети.
br Alex