Загрузка ресурсов с использованием ClassLoader - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть файл ресурса, который мне нужно загрузить во время выполнения ... он находится в src/main/resources

Я успешно загрузил файл в inputStream, используя:

LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");

LoadSAC это имя класса ...

Однако PMD жалуется на это и предполагает, что я использую

Thread.currentThread().getContextClassLoader().getResource(...)

Я перепробовал множество комбинаций и никогда не смог найти файл ... Есть мысли ... Я провёл несколько поисков с множеством предложений, но ни один из них не работает ...

Есть мысли?

1 Ответ

0 голосов
/ 02 сентября 2018

Если someFile.txt находится в той же папке, что и LoadSAC.java, вы можете сделать:

InputStream is = LoadSAC.class.getResourceAsStream("someFile.txt");

Если someFile.txt находится в подпапке subdir, вы можете сделать:

InputStream is = LoadSAC.class.getResourceAsStream("subdir/someFile.txt");

Если ваш метод в LoadSAC.java нестатичен, вы можете заменить LoadSAC.class.getResourceAsStream... на getClass().getResourceAsStream...

Будьте внимательны при компиляции с ant или maven, по умолчанию только файлы .java копируются как файлы .class в каталог сборки.

Вы должны написать некоторые правила, чтобы включить someFile.txt в финал jar.

В вашем каталоге resource вы можете добавить небольшой вспомогательный класс, например так:

import java.io.InputStream;
import java.net.URL;

import javax.activation.DataSource;
import javax.activation.URLDataSource;

public abstract class ResourceHelper {

    public static URL getURL(String name) {
        return ResourceHelper.class.getResource(name);
    }

    public static InputStream getInputStream(String name) {
        return ResourceHelper.class.getResourceAsStream(name);
    }

    public static DataSource getDataSource(String name) {
        return new URLDataSource(getURL(name));
    }
}

В LoadSAC.java просто позвоните:

InputStream is = ResourceHelper.getInputStream("someFile.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...