Ресурсы с 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();
Другие вопросы по тегам