从 Spring Boot 的 Fat JAR 中读取目录
Read directory from Spring Boot's Fat JAR
我正在尝试读取 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
returns 文件名流,然后我读取每个嵌套文件。但是当我启动 JAR 文件时,configsDirectoryResource
returns 没有文件名。但是我可以直接读取 XML 个文件,但我想在 运行 时间内获取文件列表。
如何读取 JAR 文件中的目录或获取目录中的文件列表?
您可以使用 Spring 框架中的 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");
然后我们可以从每个 resource
中得到一个 InputStream
并使用它们。
我正在尝试读取 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
returns 文件名流,然后我读取每个嵌套文件。但是当我启动 JAR 文件时,configsDirectoryResource
returns 没有文件名。但是我可以直接读取 XML 个文件,但我想在 运行 时间内获取文件列表。
如何读取 JAR 文件中的目录或获取目录中的文件列表?
您可以使用 Spring 框架中的 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");
然后我们可以从每个 resource
中得到一个 InputStream
并使用它们。