Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Использование ресурсов в jar. (java.lang.NullPointerException)

java
Теги: #<Tag:0x00007f7b645d1d58>

#1

Здравствуйте, подскажите пожалуйста, каким образом мне задействовать ресурсы, упакованные в jar.
Я сделал класс загрузчик ресурсов

public class ResourceLoader {

    ClassLoader cl = this.getClass().getClassLoader();

    public File getFile(String fileName) throws URISyntaxException {
        File file = null;
        URL resource  = cl.getResource(fileName);
        file = new File(resource.toURI());
        return file;
    }
}

и использую его так

File message = resourceLoader.getFile("directory" + File.separator + "someFile.txt");

Все работает отлично. Затем, я собираю все в джарник (ресурсы тоже упаковывются).
Но при запуске джарника выдается ошибка, что строка file = new File(resource.toURI()); в классе Загрузчика
указывает на Null

java.lang.NullPointerException

что тут может быть не так


(Sergey Korol) #2

Попробуйте вместо

getResourceAsStream(fileName);

(Василий Чернов) #3
    public class ResourceFile {

    String filename;
    ClassLoader currentClass;
    private InputStream resourceStream;

    /**
     * Creates ResourceFile object
     *
     * @param filename relative path to test resource in project folder
     */
    public ResourceFile(String filename) {
        this.filename = filename;
        this.currentClass = Thread.currentThread().getContextClassLoader();
        this.resourceStream = this.currentClass.getResourceAsStream(this.filename);
    }

    /**
     * Reads text from ResourceFile
     *
     * @return String with contents of ResourceFile
     * @throws IOException
     */
    public String read() throws IOException {
        return IOUtils.toString(resourceStream, StandardCharsets.UTF_8.name());
    }

    public byte[] readAsBytes() throws IOException {
        return IOUtils.toByteArray(resourceStream);
    }
}

мы как-то так используем ресурсы


Do different tests instead of repeating the same tests