Ресурсы с Eclipse и работающим Jar
У меня следующая структура файла:
+-src
+-- code
+-resources
+-- img
+- logo.png
+-- defaultConfig
+- config.xml
Когда я запустил код в Eclipse, он работал, так как после экспорта в исполняемый файл jar он не нашел defaultConfig
файлы
Я получаю доступ к логотипу таким образом, и он работает
URL url = getClass().getResource("/img/logo.png");
setIconImage(new ImageIcon(url).getImage());
Доступ к config.xml
не работает с разными настройками.
это было дано:
File config = new File("resources/defaultConfig/config.xml");
после долгих поисков я попробовал это:
//example
String path = "resources\\defaultConfig\\config.xml");
File config = new File(createURIFromString(path));
Я попробовал это с ./
& .\
без .
private URI createURIFromString(String path) {
URI id = null;
try {
id = getClass().getResource(path).toURI();
} catch (Exception e) {
e.printStackTrace();
}
return id;
}
Результатом является null
Указатель.
я пробовал
- добавить папку в каталог ресурсов
- добавить папку в корневой каталог (тот же слой, что и src)
- добавьте папку Config в каталог ресурсов
Решение:
ранее файл не был в банке, поэтому до использования getResorce
метод, это работает.
3 ответа
Почему вы создаете File
объект? Ваши данные встроены в JAR-файл; нет никаких File
объект, который вы можете создать, который ссылается на него (если у вас где-то нет собственной файловой системы).
Вам нужно вырвать все, что требует чтения конфигурации из файла, и вместо этого заставить InputStream
, Вы можете использовать
InputStream stream = Foo.class.getResourceAsStream("/defaultConfig/config.xml");
Это должно помочь вам прочитать XML-файл внутри jar-пакета
"Вы не можете получить объект File (поскольку он больше не является файлом, если он находится в.jar), но вы должны быть в состоянии получить его как поток через getResourceAsStream(path)"
Если все упаковано, то вы должны получить ресурсы с getResource
Точно так же, как вы получаете изображения, но может быть другой путь.
URL url = getClass().getResource("/defaultConfig/config.xml");
Тогда вы можете читать прямо с этого URL. См. Чтение напрямую с URL.
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close();