首页 > 解决方案 > 从 Spring Boot 的 Fat JAR 中读取目录

问题描述

我正在尝试读取resources/configs我的 Spring Boot 2 应用程序中的目录。这是目录结构的示例:

resources
| configs
| | file1.xml
| | file2.xml
| | ...

我正在读取目录和嵌套文件的代码:

@Value("${app.configs-path}")
String configsPath;

...

Resource configsDirectoryResource = new ClassPathResource(configsPath);
InputStream configsDirectoryStream = configsDirectoryResource.getInputStream();
InputStreamReader configsDirectoryStreamReader = new InputStreamReader(configsDirectoryStream);
BufferedReader configsDirectoryBufferedReader = new BufferedReader(configsDirectoryStreamReader);

List<String> configFileNames = configsDirectoryBufferedReader.lines().collect(toList());

我的application.properties

app.configs-path=configs

当我在 IDE 中运行我的应用程序时,它工作正常。该对象configsDirectoryResource返回文件名流,然后我读取每个嵌套文件。但是当我启动 JAR 文件时,configsDirectoryResource没有返回文件名。但是我可以直接读取 XML 文件,但我想在运行时获取文件列表。

如何读取目录或获取 JAR 文件中目录中的文件列表?

标签: javaspring-bootclasspath

解决方案


您可以PathMatchingResourcePatternResolver从 Spring Framework 中使用。

示例代码:

ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
Resource[] resources = resolver.getResources("classpath*:/"+configsPath+"/*.xml") ;
for (Resource resource: resources){
    logger.info(resource.getFilename());
}

推荐阅读