Просмотр содержимого папки, встроенной в uberjar в SpringBoot - PullRequest
1 голос
/ 14 марта 2020

Я пытаюсь составить список содержимого папки, расположенной в папке / src / main / resource / моего приложения SpringBoot. Папка содержит обычные файлы. Код отлично работает в IDE (STS), но не после того, как приложение упаковано.

Вот код:

    Resource xCatRawResource = resourceLoader.getResource(xCatRawResourcePath);

    try(
            InputStream in = xCatRawResource.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in))
    ) 
    {               
            byte[] bdata = FileCopyUtils.copyToByteArray(in);
            String data = new String(bdata, StandardCharsets.UTF_8);
            // data is an empty String when app is packaged

    }
    catch(IOException ioe) {
        LOGGER.error("Unable to parse XCAT names", ioe);
    }

Я пробовал разные стратегии (используя ResourceUtils et c ...) но безуспешно.

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 16 марта 2020

Попробуйте использовать библиотеку Reflections - узнайте больше об этом здесь .:

POM для последней версии:

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.12</version>
</dependency>

Пример использования it:

Предположим, у вас есть каталог с именем jsonfiles в каталоге /src/main/resource/.

Следующий код распечатает содержимое каталога jsonfiles:

import org.reflections.Reflections;
import org.reflections.scanners.ResourcesScanner;
import org.reflections.util.ConfigurationBuilder;
import org.reflections.util.ClasspathHelper;
import java.util.regex.Pattern;
import java.util.Set;

...

Reflections reflections = new Reflections(new ConfigurationBuilder()
        .setUrls(ClasspathHelper.forPackage("YOUR.PACKAGE.NAME.HERE"))
        .setScanners(new ResourcesScanner()));
Set<String> resources = reflections.getResources(Pattern.compile("jsonfiles.*"));
resources.forEach((resource) -> {
    System.out.println(resource);
});

Вывод будет примерно таким:

jsonfiles/json_file_one.json
jsonfiles/json_file_two.json

Я проверил это в толстом / убер JAR.

Отказ от ответственности: я не использую Spring - так что если это как-то вызывает вашу проблему, то мое решение может не работать. Но я бы ожидал, что это так.

(Небольшой момент: я замечаю, что в вашем вопросе ваш код определяет буферизованный читатель br, который вы не используете - вы используете поток ввода in .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...