Bota de primavera - Handle CSV y archivo Excel Multipart

Tengo una API REST en Spring Boot Application que toma en un param del tipo de archivo Multipart.

Existe la posibilidad de que el usuario pueda importar archivo CSV o archivo Excel(.xlsx / .xsl) de gran tamaño que necesita ser manejado.

Estoy usando Apache POI para leer el archivo de tipo Excel y está funcionando bien. A mi código existente, ¿cómo puedo manejar eficientemente la lectura de archivos CSV también

A continuación se muestra el archivo Excel Código de lectura:

    @RequestMapping(value="/read", method = RequestMethod.POST)
    @Transactional
    public Map read(@RequestParam("file") MultipartFile file) {
    
    Map response = new ArrayList();
    
    if (!file.isEmpty()) {
        ByteArrayInputStream stream;
        Workbook wb;
        StringBuilder contentSb = new StringBuilder();
        
        try {
            stream = new   ByteArrayInputStream(file.getBytes());
            wb = WorkbookFactory.create(stream);
            org.apache.poi.ss.usermodel.Sheet sheet = wb.getSheetAt(wb.getActiveSheetIndex());
            
            Iterator rowIterator = sheet.rowIterator();
            System.out.println("Processing Excel file");
            for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {
                  Row row = sheet.getRow(rowIndex);
                  if (row != null) {
                    Cell cell = row.getCell(0);
                    if (cell != null) {
                        contentSb.append(cell.getStringCellValue()+",");
                    }
                  }
                }
            System.out.println("Processed Excel file");
            return response;
            
        } catch (Exception e) {     
            e.printStackTrace();                
        } 
    }
    else {
        return response;
    }
}

¡Gracias por adelantado!

Pregunta hecha hace 3 años, 4 meses, 24 días - Por geekguru


2 Respuestas:

  • Para manejar eficientemente la lectura de archivos CSV en tu API REST en Spring Boot, puedes utilizar la librería OpenCSV. OpenCSV es una biblioteca Java de código abierto que te permite leer y escribir archivos CSV de forma sencilla y eficiente.

    Aquí te muestro cómo puedes adaptar tu código existente para manejar la lectura de archivos CSV con OpenCSV:

    • Agrega la dependencia de OpenCSV a tu proyecto Maven (pom.xml):
    xml
    
        com.opencsv
        opencsv
        5.5
    

    • Modifica tu método `read` para manejar tanto archivos Excel como archivos CSV. Aquí te dejo un ejemplo de cómo podrías hacerlo:
    java
    
    

    @RequestMapping(value="/read", method = RequestMethod.POST) @Transactional public Map read(@RequestParam("file") MultipartFile file) {

    Map response = new HashMap<>();

    if (!file.isEmpty()) { try { // Verificar si el archivo es CSV o Excel basado en la extensión del archivo String filename = file.getOriginalFilename(); if (filename != null && (filename.endsWith(".csv") || filename.endsWith(".CSV"))) { // Leer archivo CSV InputStreamReader reader = new InputStreamReader(file.getInputStream()); CSVReader csvReader = new CSVReader(reader); String[] nextRecord; StringBuilder contentSb = new StringBuilder();

    while ((nextRecord = csvReader.readNext()) != null) { for (String cell : nextRecord) { contentSb.append(cell + ","); } } csvReader.close(); response.put("content", contentSb.toString()); } else { // Leer archivo Excel Workbook wb = WorkbookFactory.create(file.getInputStream()); Sheet sheet = wb.getSheetAt(wb.getActiveSheetIndex()); StringBuilder contentSb = new StringBuilder();

    for (Row row : sheet) { Cell cell = row.getCell(0); if (cell != null) { contentSb.append(cell.getStringCellValue() + ","); } } response.put("content", contentSb.toString()); }

    return response; } catch (Exception e) { e.printStackTrace(); response.put("error", e.getMessage()); return response; } } else { response.put("error", "El archivo está vacío"); return response; } }

    Con este código, primero verificamos si el archivo a procesar es un archivo CSV o Excel basado en la extensión del archivo. Si es un archivo CSV, utilizamos OpenCSV para leer el archivo. Si es un archivo Excel, utilizamos Apache POI como lo venías haciendo.

    Recuerda manejar adecuadamente las excepciones y los posibles casos de error al procesar los archivos en tu API. ¡Espero que esta solución te sea de ayuda! Si tienes más preguntas, ¡no dudes en consultar!

    Respondida el Dec 22, 2020 a las 05:17 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Claro, aquí tienes cómo puedes manejar eficientemente la lectura de archivos CSV en tu aplicación Spring Boot:

    • Agrega la dependencia para leer archivos CSV:

    xml
       
           com.opencsv
           opencsv
           5.6
       
       

    • Crear un nuevo método para leer archivos CSV:

    java
       @RequestMapping(value="/readCSV", method = RequestMethod.POST)
       @Transactional
       public Map readCSV(@RequestParam("file") MultipartFile file) {

    Map response = new HashMap<>();

    if (!file.isEmpty()) { try { // Leer el archivo CSV CSVReader reader = new CSVReader(new InputStreamReader(file.getInputStream()));

    // Iterar sobre las líneas del archivo CSV String[] line; while ((line = reader.readNext()) != null) { // Procesar cada línea // ...

    // Almacenar los datos procesados en el mapa de respuesta // ... }

    System.out.println("Processed CSV file"); return response;

    } catch (Exception e) { e.printStackTrace(); } }

    return response; }

    • Enrutar la solicitud POST a este nuevo método:

    java
       @PostMapping(value = "/read")
       public Map read(@RequestParam("file") MultipartFile file) {
           if (file.getOriginalFilename().endsWith(".csv")) {
               return readCSV(file);
           } else {
               return readExcel(file);
           }
       }
       

    Ahora, tu aplicación podrá manejar archivos CSV y Excel de manera eficiente.

    Respondida el Dec 22, 2020 a las 05:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0