问题描述
我正在尝试在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文件,但是我想在运行时获取文件列表。
解决方法
您可以在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());
}
,
好,那比我想象的要容易。
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resourcePatternResolver.getResources(configsPath + "/*.xml");
然后我们可以从每个InputStream
中获得一个resource
并与他们合作。