Escribir un archivo CSV en Java usando OpenCSV

Un archivo de valores separados por comas (CSV) es simplemente un archivo normal de texto sin formato, almacena datos columna por columna y los divide mediante un separador (por ejemplo, normalmente es una coma «,»).

OpenCSV es una biblioteca de analizador CSV para Java. OpenCSV admite todas las operaciones básicas de tipo CSV que desee realizar. Java 7 es actualmente la versión mínima admitida para OpenCSV. El lenguaje Java no brinda soporte nativo para manejar archivos CSV de manera efectiva, por lo que estamos usando OpenCSV para manejar archivos CSV en Java.

¿Cómo agregar OpenCSV en su proyecto?

  • Para el proyecto maven, puede incluir la dependencia maven de OpenCSV en el archivo pom.xml.

    <dependency>
        <groupId>com.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>4.1</version>
    </dependency>
  • Para Gradle Project, puede incluir la dependencia de OpenCSV.
    compile group: 'com.opencsv', name: 'opencsv', version: '4.1'
  • Puede descargar OpenCSV Jar e incluirlo en la ruta de clase de su proyecto.
  • Escribir un archivo CSV

      Escribir un archivo CSV es tan simple como leerlo. Cree una instancia de CSVWriter pasando el objeto FileWriter como parámetro y comience a escribir datos en el archivo CSV utilizando métodos de CSVWriter Class. Después de escribir los datos, debemos cerrar la conexión CSVWriter llamando al método close() de la clase CSVWriter.

    1. Escribir datos línea por línea: CSVWriter puede escribir línea por línea usando el método writeNext() donde se pasa una array de strings con cada elemento separado por comas como una entrada separada.
      CÓDIGO:

      public static void writeDataLineByLine(String filePath)
      {
          // first create file object for file placed at location
          // specified by filepath
          File file = new File(filePath);
          try {
              // create FileWriter object with file as parameter
              FileWriter outputfile = new FileWriter(file);
        
              // create CSVWriter object filewriter object as parameter
              CSVWriter writer = new CSVWriter(outputfile);
        
              // adding header to csv
              String[] header = { "Name", "Class", "Marks" };
              writer.writeNext(header);
        
              // add data to csv
              String[] data1 = { "Aman", "10", "620" };
              writer.writeNext(data1);
              String[] data2 = { "Suraj", "10", "630" };
              writer.writeNext(data2);
        
              // closing writer connection
              writer.close();
          }
          catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }

      Salida: archivo result.csv con los siguientes datos

      "Name", "Class", "Marks"
      "Aman", "10", "620"
      "Suraj", "10", "630"
      
    2. Escriba todos los datos a la vez: para escribir datos a la vez, llame al método writeAll() de la clase CSVWriter y pase A List of String[] como parámetro con cada String[] representando una línea del archivo.
      CÓDIGO:

      public static void writeDataAtOnce(String filePath)
      {
        
          // first create file object for file placed at location
          // specified by filepath
          File file = new File(filePath);
        
          try {
              // create FileWriter object with file as parameter
              FileWriter outputfile = new FileWriter(file);
        
              // create CSVWriter object filewriter object as parameter
              CSVWriter writer = new CSVWriter(outputfile);
        
              // create a List which contains String array
              List<String[]> data = new ArrayList<String[]>();
              data.add(new String[] { "Name", "Class", "Marks" });
              data.add(new String[] { "Aman", "10", "620" });
              data.add(new String[] { "Suraj", "10", "630" });
              writer.writeAll(data);
        
              // closing writer connection
              writer.close();
          }
          catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }

      Salida: archivo result.csv con los siguientes datos

      "Name", "Class", "Marks"
      "Aman", "10", "620"
      "Suraj", "10", "630"
      

    Escribir archivo CSV con diferente separador

    De forma predeterminada, el separador de CSV será una coma (,). Si desea crear otro carácter como separador, puede pasarlo como argumento a la clase CSVWriter.

    Syntax :
    CSVWriter(Writer writer, char separator, char quotechar,
                                  char escapechar, String lineEnd)
    Description : Constructs CSVWriter with supplied separator,
    quote char, escape char and line ending.
    

    Código:

    public static void writeDataForCustomSeparatorCSV(String filePath)
    {
      
        // first create file object for file placed at location
        // specified by filepath
        File file = new File(filePath);
      
        try {
            // create FileWriter object with file as parameter
            FileWriter outputfile = new FileWriter(file);
      
            // create CSVWriter with '|' as separator
            CSVWriter writer = new CSVWriter(outputfile, '|',
                                             CSVWriter.NO_QUOTE_CHARACTER,
                                             CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                             CSVWriter.DEFAULT_LINE_END);
      
            // create a List which contains String array
            List<String[]> data = new ArrayList<String[]>();
            data.add(new String[] { "Name", "Class", "Marks" });
            data.add(new String[] { "Aman", "10", "620" });
            data.add(new String[] { "Suraj", "10", "630" });
            writer.writeAll(data);
      
            // closing writer connection
            writer.close();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    

    Salida: archivo result.csv con los siguientes datos

    Name|Class|Marks
    Aman|10|620
    Suraj|10|630
    

    Ejemplo:
    vamos a crear un programa java que genere un archivo csv separado por punto y coma y contenga los datos proporcionados como entrada.

    Input:
    Enter no of rows
    9
    Enter Data
    Name Class Marks
    Aman 10 543
    Amar 10 541
    Sanjeet 10 555
    Luv 10 580
    Ranjeet 10 512
    Rabi 10 540
    Dev 10 333
    Sunny 10 198
    

    Código:

    // Java program to illustrate
    // for Writing Data in CSV file
    import java.io.*;
    import java.util.*;
    import com.opencsv.CSVWriter;
      
    public class ResultGenerator {
        private static final String CSV_FILE_PATH
            = "./result.csv";
        public static void main(String[] args)
        {
            addDataToCSV(CSV_FILE_PATH);
        }
        public static void addDataToCSV(String output)
        {
            // first create file object for file placed at location
            // specified by filepath
            File file = new File(output);
            Scanner sc = new Scanner(System.in);
            try {
                // create FileWriter object with file as parameter
                FileWriter outputfile = new FileWriter(file);
      
                // create CSVWriter with ';' as separator
                CSVWriter writer = new CSVWriter(outputfile, ';',
                                                 CSVWriter.NO_QUOTE_CHARACTER,
                                                 CSVWriter.DEFAULT_ESCAPE_CHARACTER,
                                                 CSVWriter.DEFAULT_LINE_END);
      
                // create a List which contains Data
                List<String[]> data = new ArrayList<String[]>();
      
                System.out.println("Enter no of rows");
                int noOfRow = Integer.parseInt(sc.nextLine());
                System.out.println("Enter Data");
                for (int i = 0; i < noOfRow; i++) {
                    String row = sc.nextLine();
                    String[] rowdata = row.split(" ");
                    data.add(rowdata);
                }
      
                writer.writeAll(data);
      
                // closing writer connection
                writer.close();
            }
            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    Salida: archivo result.csv con los siguientes datos

    Name;Class;Marks
    Aman;10;543
    Amar;10;541
    Sanjeet;10;555
    Luv;10;580
    Ranjeet;10;512
    Rabi;10;540
    Dev;10;333
    Sunny;10;198
    
    

    En artículos futuros, incluiremos más operaciones en archivos CSV usando OpenCSV.
    Referencia: documentación de OpenCSV , documentación de la clase CSVWriter

    Publicación traducida automáticamente

    Artículo escrito por AmanSingh2210 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

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