es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo recorrer varios archivos para procesar cada uno de ellos

Tengo una clase funcionando llamada serverCfgParser que funciona perfectamente para un solo archivo:

serverCfgParser.parseFile("src/main/resources/static/server_dev_devops_pc.cfg");

Necesito cambiar la lógica para que se procesen varios archivos que terminen con .cfg. Quiero pasar una variable en lugar de una ruta codificada. Necesitaré recorrer todos los archivos en un directorio dado y pasarlos a serverCfgParser. He visto algunos ejemplos, pero no puedo hacer que funcione.

File serverConfigs = new File("src/main/resources/static");
File[] files = serverConfigs.listFiles((d, name) -> name.endsWith(".cfg"));

for (File configFile : files) {
    System.out.println(configFile);
}

ServerCfgParser serverCfgParser = new ServerCfgParser();

for (File configFile : files) {
    Charset encoding = Charset.defaultCharset();
    List lines = Files.readAllLines(Paths.get(configFile), encoding);
    serverCfgParser.parseFile(configFile);
}

He utilizado el primer bucle for para probar que las rutas de archivos se estaban poblado correctamente.

src\main\resources\static\server_dev_aws_app1.cfg
src\main\resources\static\server_dev_aws_app2.cfg
src\main\resources\static\server_dev_aws_app3.cfg
src\main\resources\static\server_dev_aws_app4.cfg
src\main\resources\static\server_dev_aws_app5.cfg
src\main\resources\static\server_dev_aws_app6.cfg
src\main\resources\static\server_dev_devops_app1.cfg
src\main\resources\static\server_dev_devops_app2.cfg
src\main\resources\static\server_dev_devops_app3.cfg
src\main\resources\static\server_dev_devops_app4.cfg
src\main\resources\static\server_dev_devops_app5.cfg
src\main\resources\static\server_dev_devops_app6.cfg
src\main\resources\static\server_dev_mansible_app5.cfg
src\main\resources\static\server_dev_mansible_app6.cfg
src\main\resources\static\server_test_mansible_app5.cfg
src\main\resources\static\server_test_mansible_app6.cfg

Java se queja sobre Paths.get(configFile):

El método get(URI) en el tipo Paths no es aplicable para los
argumentos (File)

Entiendo a qué se refiere, pero no estoy seguro de cómo proporcionar los parámetros correctos. Cada ejemplo que he visto es similar al anterior, pero solo para archivos individuales. Aún no he encontrado un ejemplo que recorra varios archivos.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema con Paths.get(configFile) es que espera un argumento de tipo URI, pero estás pasando un objeto File. Para solucionar esto, puedes utilizar configFile.toURI() para convertir el objeto File a un objeto URI que pueda ser utilizado como argumento para Paths.get().

    Aquí está el fragmento de código modificado:

    File serverConfigs = new File("src/main/resources/static");
    File[] files = serverConfigs.listFiles((d, name) -> name.endsWith(".cfg"));
    
    ServerCfgParser serverCfgParser = new ServerCfgParser();
    
    for (File configFile : files) {
        Charset encoding = Charset.defaultCharset();
        List<string> lines = Files.readAllLines(Paths.get(configFile.toURI()), encoding);
        serverCfgParser.parseFile(configFile);
    }
    

    Utilizando configFile.toURI() debería resolver el problema y permitir que el código itere a través de múltiples archivos con la ruta adecuada proporcionada como una variable.

Comments are closed.