Saltar al contenido

Leer archivos de los subdirectorios de la carpeta de recursos de la ruta de clase en Spring Boot

Solución:

Como se menciona en la pregunta, primero quiero obtener confX directorios luego leer conf.txt archivos.

Finalmente, pude resolver mi problema de la siguiente manera.

ClassLoader cl = this.getClass().getClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
try {
        Resource resources[] = resolver.getResources("classpath:Conf/*/");
} catch (IOException e) {
        e.printStackTrace();
}

Esto le dará a todos los subdirectorios de Conf directorio. Aquí / al final en classpath:Conf/*/ es muy importante. Si no damos / Funcionará normalmente pero no funcionará en jar. Desde el bloque de código anterior resources[] la matriz contendrá la ubicación del directorio como esta class path resource [Conf/conf1/] and so on. Necesito el nombre del subdirectorio para leer el archivo correspondiente. Aquí está el código para ello.

Arrays.asList(resources).stream()
                        .forEach(resource ->{ 
                                  Pattern dirPattern = Pattern.compile(".*?\[(.*/(.*?))/\]$");
                                  if (resource.toString().matches(".*?\[.*?\]$")) {
                                      Matcher matcher = dirPattern.matcher(resource.toString());
                                     if (matcher.find()) {
                                        String dir = matcher.group(1);
                                        readFile(dir);
                                      }
                                  }
                             });


public void readFile(String dir)
{

   ClassPathResource classPathResource = new ClassPathResource(dir+ "/conf.txt");
    try (BufferedReader fileReader = new BufferedReader(
            new InputStreamReader(classPathResource2.getInputStream()))) {
        fileReader.lines().forEach(data -> System.out.println(data));
     }catch (IOException e) {
        e.printStackTrace();
    }
}

Necesito mapear cada archivo txt con su directorio correspondiente. Por eso me acerqué de esta manera. Si solo necesita obtener archivos y leer, puede hacerlo como se muestra a continuación. Esto enumerará todo debajo Conf directorio.

 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(cl);
try {
        Resource resources[] = resolver.getResources("classpath:Conf/**");
} catch (IOException e) {
        e.printStackTrace();
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *