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.

Extraer columna de encabezado de un archivo dado

Estoy tratando de extraer los nombres de las columnas de un archivo dado utilizando Java.

Contenido de ejemplo del archivo:

person_id,person_name
100 Alice
250 Louis

El archivo tiene un formato CSV.
Mi código es el siguiente:

protected Map<string, string=””> fileHeader(FileProvider fs, String file, HashMap<string, object=””> metaData) {
Map<string, string=””> fixedFormatProperties = new HashMap<string, string=””>();

//fixedFormatProperties.put(FixedFormat.COLUMN_SEPARATOR__PARAM, columnSep);

BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader(file));
    br.close();

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
String line = null;
try {
    while ((line = br.readLine()) != null) {

        final String[] lineValues = line.split(",");
    }
} catch (IOException e) {
    e.printStackTrace();
}

return null;

}

Mi solución lee todas las líneas, pero lo que estoy buscando es extraer solo los nombres de las columnas de cualquier archivo dado que tenga el formato y el contenido como el ejemplo anterior. ¿Y cómo puedo devolver un Map<string, string=””> como resultado?
Gracias</string,></string,></string,></string,></string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para extraer los nombres de columna del archivo dado utilizando Java, puede modificar el código de la siguiente manera:

    protected Map<string, string=""> fileHeader(FileProvider fs, String file, HashMap<string, object=""> metaData) {
        Map<string, string=""> fixedFormatProperties = new HashMap<string,string>();
    
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line = br.readLine();
            if (line != null) { // verifica si el archivo no está vacío
                String[] columnNames = line.split(","); // extrae los nombres de columna de la primera línea
                for (int i = 0; i < columnNames.length; i++) {
                    fixedFormatProperties.put("column" + i, columnNames[i]); // agrega los nombres de columna al mapa
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        return fixedFormatProperties;
    }
    

    Aquí, primero abrimos un BufferedReader para leer el archivo línea por línea. Leemos la primera línea y extraemos los nombres de columna utilizando el método split() con coma como delimitador. Luego recorremos los nombres de columna y los agregamos al mapa fixedFormatProperties con la clave como "columna" concatenada con el número de índice y el valor como el nombre de la columna. Finalmente, devolvemos el mapa como resultado.

    Ten en cuenta que también usamos la declaración try-with-resources para cerrar automáticamente el BufferedReader después de leer el archivo. Esta es una práctica recomendada en lugar de cerrar manualmente el lector en un bloque finally.

    Ejemplo de uso:

    FileProvider fs = new FileProvider(); // crea un objeto proveedor de archivos
    HashMap<string, object=""> metaData = new HashMap<string, object="">(); // crea un mapa de metadatos
    Map<string, string=""> columnNames = fileHeader(fs, "ejemplo.csv", metaData); // llama al método para obtener los nombres de columna
    
    // imprime los nombres de columna
    for (String key : columnNames.keySet()) {
        System.out.println(key + ": " + columnNames.get(key));
    }
    

    Salida:

    columna0: person_id
    columna1: person_name
    </string,></string,></string,></string,string></string,></string,></string,>

Comments are closed.