Tengo una aplicación Spring Boot con una carpeta de recursos de Java:
src | main | resources | test | test1.json test2.json ... En la carpeta de recursos hay archivos json. Puedo leer estos archivos dentro de mi IDE (IntelliJ). Pero como un archivo JAR compilado, obtengo excepciones Nullpointer .
Spring Boot copia los archivos en: BOOT-INF/classes/test ¿Es posible leer los archivos de recursos dentro de un archivo JAR? No sé los nombres de los archivos. Entonces, primero, tengo que obtener todos los nombres de archivo y leer cada archivo.
¿Alguien tiene alguna idea?
ACTUALIZAR
He intentado esto:
Resources[] resources = applicationContext.getResources("classpath*:**/test/*.json");Con eso obtengo todas las rutas de archivo. Pero eso necesita demasiado tiempo. E incluso si obtengo los nombres de los archivos, ¿cómo los leería?
Esto realmente funciona usando un 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()); }La siguiente solución leerá los archivos en un mapa.
Aquí lees sus recursos:
Resource[] resources = applicationContext.getResources("classpath*:test/*.json"); for (Resource r: resources) { processResource(r); }Aquí tramitas tus recursos:
// 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(); } } }