java - 从 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 文件中目录中的文件列表?
解决方案
您可以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());
}
推荐阅读
- angular - 如何将 MatSort 与 Object[] 类型的表一起使用
- excel - 有没有办法使用索引匹配或 Vlookup 在另一个工作簿中查找数据?
- javascript - 如何在matrix3d上获得比例(x,y,z)和旋转(x,y,z)?
- shell - jq:错误(在
:0): 不能迭代数字 (400) - python - 我什么时候不应该在 init 函数后面加上参数?
- json - JSONDecoder 给出不正确的格式
- css - Angular ngClass mat-list-item 添加条件以应用背景颜色
- java - 是否可以将 Query-By-Example 与 spring 数据方法结合使用?
- c++ - c++中make_unique和make_unique与reference_wrapper的区别
- java - 由于其插件,所有 xml 文件的 Eclipse 错误