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();
}