【问题标题】:Read directory from Spring Boot's Fat JAR从 Spring Boot 的 Fat JAR 中读取目录
【发布时间】:2020-09-02 09:31:13
【问题描述】:

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

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 文件中目录中的文件列表?

【问题讨论】:

    标签: java spring-boot classpath


    【解决方案1】:

    您可以使用 Spring Framework 中的PathMatchingResourcePatternResolver

    示例代码:

    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());
    }
    

    【讨论】:

    • 是的,我发现我可以使用 PathMatchingResourcePatternResolver。非常感谢!
    【解决方案2】:

    好吧,这比我想象的要容易。

    ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    Resource[] resources = resourcePatternResolver.getResources(configsPath + "/*.xml");
    

    然后我们可以从每个resource 获得一个InputStream 并与他们合作。

    【讨论】:

      猜你喜欢
      • 2017-06-18
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 2021-06-03
      • 2021-02-27
      • 2015-04-16
      • 2017-08-16
      相关资源
      最近更新 更多