Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Escritura y lectura de archivos CSV

Escritura y lectura de archivos CSV

Por jc mouse miércoles, mayo 2, 2018

Los archivos CSV (del inglés comma-separated values – separados por comas) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla donde las columnas se separan por comas (también por otro tipo de delimitador como ser punto y coma «;»,  barra vertical o pipe «|», etc) y las filas por saltos de línea.

Si bien son archivos de texto, estos se guardan bajo la extensión *.CSV para poder diferenciarlos.

Java nos permite trabajar cómodamente con archivos de texto e implementar los métodos necesarios para el trabajo con archivos CSV, pero también es preferible contar con otras opciones que nos ahorran lineas de código y de tiempo. Una de estas herramientas es Apache Commons CSV que a la fecha se encuentra en su versión 1.5 (https://commons.apache.org/proper/commons-csv/)

A continuación un ejemplo de su uso para la escritura y lectura de archivos CSV

Clase Persona

/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class Persona {

    private String nombre;
    private String apellido;
    private int edad;
    private String mail;    

    public Persona(String nombre, String apellido, int edad, String mail) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.edad = edad;
        this.mail = mail;        
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void setApellido(String apellido) {
        this.apellido = apellido;
    }

    public int getEdad() {
        return edad;
    }

    public void setEdad(int edad) {
        this.edad = edad;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }  

    @Override
    public String toString() {
        return "Persona{" + "nombre=" + nombre + ", apellido=" + apellido + ", edad=" + edad + ", mail=" + mail + '}';
    }

}

Clase Main implementando la librería Apache Commons CSV

import java.io.BufferedReader;
import java.io.IOException;
import java.io.Writer;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVPrinter;
import org.apache.commons.csv.CSVRecord;

/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class Main {

    public static void main(String[] args) {

        final String[] encabezado = {"Nombre", "Apellido", "Edad", "E-Mail"};
        final Character delimiter = '|';//Delimitador, por defecto es ","
        String archivoCSV = "E:\\documentos\\archivocsv.csv";//Nombre de archivo CSV

        /**
         * Datos para el archivo CSV
         */
        ArrayList<Persona> personaList = new ArrayList<>();
        personaList.add(new Persona("Armando", "Bronca Segura", 99, "armn_s8@mail.com"));
        personaList.add(new Persona("Benny", "Melo Sobas", 19, "benny__9@mail.com"));
        personaList.add(new Persona("Encarna", "Vales Nosvemos", 41, "envams5@mail.com"));
        personaList.add(new Persona("Soledad", "Severa del Campo", 68, "sol8_campos@mail.com"));

        /**
         * Escritura archivo CSV
         */
        try {
            Writer writer = Files.newBufferedWriter(Paths.get(archivoCSV));
            CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT.withHeader(encabezado)
                    .withDelimiter(delimiter));

            for (Persona p : personaList) {
                csvPrinter.printRecord(Arrays.asList(
                        p.getNombre(),
                        p.getApellido(),
                        String.valueOf(p.getEdad()),
                        p.getMail()));
            }
            csvPrinter.flush();
            System.out.println("Archivo CSV creado.\n");
        } catch (IOException e) {
            e.printStackTrace();
        }

        /**
         * Lectura Archivo CSV
         */
        System.out.println("Lectuar de Archivo CSV ["+archivoCSV+"] "); 
        try {
            BufferedReader reader = Files.newBufferedReader(Paths.get(archivoCSV));
            CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT.withFirstRecordAsHeader().
                    withHeader(encabezado)
                    .withIgnoreHeaderCase()
                    .withTrim()
                    .withDelimiter(delimiter));
            
            System.out.println("Registros: "); 
            for (CSVRecord csvRecord : csvParser) {
                Persona persona = new Persona(
                        csvRecord.get("Nombre"),
                        csvRecord.get("Apellido"),
                        Integer.valueOf(csvRecord.get("Edad")),
                        csvRecord.get("E-Mail")
                );                
                System.out.println(" - " +persona);                
            }
            System.out.println("\nLectura de archivo CSV terminada.");
        } catch (IOException | NumberFormatException e) {
            e.printStackTrace();
        }

    }

}

Esto nos da como resultado, un archivo *:csv de la forma

texto plano

y por consola tenemos:

consola java

enjoy!!!

Tags

Artículos similares

Introducción a Retrofit: Cliente para consumir un API REST

La página oficial de Retrofit, se describe así misma como «Un cliente REST seguro para Android y Java».  Y es así, ya qu[...]

Obteniendo coordenadas XY con Touch Event

Los smartphone al no tener los típicos botones de los celulares, su pantalla es sensible al movimiento, esto se llama «t[...]

Cifrado del Cesar en C Sharp

En criptografía, el cifrado César, también conocido como cifrado por desplazamiento, código de César o desplazamiento de[...]

Bloquear pantalla cliente

En este tutorial crearemos una aplicación que bloqueara toda la pantalla de la PC y no nos dejara realizar ninguna tarea[...]

Uso de BitmapFont en LibGDX

En este tutorial conoceremos lo que es el uso de BitmapFont en LibGDX y algún uso que le podemos dar como crear un menú,[...]

Procedimientos Almacenados: Parámetros INOUT

En post anteriores vimos lo que son los parámetros IN y los parámetros OUT pero existe otro tipo de parámetro que es la[...]