CPA*_*CPA 5 java spring spring-boot
我有一个Java资源文件夹中的春天启动应用程序:
src
|
main
|
resources
|
test
|
test1.json
test2.json
...
Run Code Online (Sandbox Code Playgroud)
在资源文件夹中有json文件。我可以在IDE(IntelliJ)中读取这些文件。但是作为一个已编译的JAR文件,我得到了Nullpointer例外。
Spring Boot将文件复制到:BOOT-INF/classes/test是否可以读取JAR文件中的资源文件?我不知道文件名。因此,首先,我必须获取所有文件名并读取每个文件。
有没有人有一个想法?
更新
我已经试过了:
Resources[] resources = applicationContext.getResources("classpath*:**/test/*.json");
Run Code Online (Sandbox Code Playgroud)
与我收到的所有文件路径。但是,需要太多的时间。即使我得到文件名,我将如何读取文件?
小智 8
这实际上可以使用 ResourcePatternResolver
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = resolver.getResources("classpath*:test/*.json");
for(Resource r: resources) {
InputStream inputStream = r.getInputStream();
File somethingFile = File.createTempFile(r.getFilename(), ".cxl");
try {
FileUtils.copyInputStreamToFile(inputStream, somethingFile);
} finally {
IOUtils.closeQuietly(inputStream);
}
LicenseManager.setLicenseFile(somethingFile.getAbsolutePath());
log.info("File Path is " + somethingFile.getAbsolutePath());
}
Run Code Online (Sandbox Code Playgroud)
下面的解决方案将读取文件到一个地图。
在这里,你看你的资源:
Resource[] resources = applicationContext.getResources("classpath*:test/*.json");
for (Resource r: resources) {
processResource(r);
}
Run Code Online (Sandbox Code Playgroud)
在这里,你处理你的资源:
// you need to add a dependency (if you don't have it already) for com.fasterxml.jackson.core:jackson-databind
ObjectMapper mapper = new ObjectMapper();
private void processResource(Resource resource) {
try {
Map<String, Object> jsonMap = mapper.readValue(resource.getInputStream(), Map.class);
// do stuffs with your jsoMap
} catch(Exception e){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9276 次 |
| 最近记录: |