Cómo escribir ArrayList <Object> en un archivo csv

Tengo una ArrayList<Metadata>y quiero saber si hay una API de Java para trabajar con archivos CSV que tiene un método de escritura que acepta una ArrayList <> como parámetro similar a LinqToCsv en .Net. Como sé, OpenCSV está disponible, pero la clase CsvWriter no acepta una colección. Mi clase de metadatos es

public class Metadata{
    private String page;
    private String document;
    private String loan;
    private String type;
}
ArrayList<Metadata> record = new ArrayList<Metadata>();

Una vez que complete el registro, quiero escribir cada fila en un archivo csv. Por favor recomiende.

Respuesta 1

Seguramente habrá un montón de API que harán esto por usted, pero ¿por qué no hacerlo usted mismo para un caso tan simple? Le ahorrará una dependencia, lo cual es bueno para cualquier proyecto de cualquier tamaño.

Cree un toCsvRow()método en Metadataque une las cadenas separadas por una coma.

public String toCsvRow() {
    return Stream.of(page, document, loan, type)
            .map(value -> value.replaceAll("\"", "\"\""))
            .map(value -> Stream.of("\"", ",").anyMatch(value::contains) ? "\"" + value + "\"" : value)
            .collect(Collectors.joining(","));
}

Recopile el resultado de este método para cada Metadataobjeto separado por una nueva línea.

String recordAsCsv = record.stream()
        .map(Metadata::toCsvRow)
        .collect(Collectors.joining(System.getProperty("line.separator")));

EDITAR Si no tiene la suerte de tener Java 8 y la API Stream a su disposición, esto sería casi tan simple como usar una Lista tradicional.

public String toCsvRow() {
    String csvRow = "";
    for (String value : Arrays.asList(page, document, loan, type)) {
        String processed = value;
        if (value.contains("\"") || value.contains(",")) {
            processed = "\"" + value.replaceAll("\"", "\"\"") + "\"";
        }
        csvRow += "," + processed;
    }
    return csvRow.substring(1);
}
Respuesta: 2

Al usar CSVWriter , puede convertirlo ArrayListen una matriz y pasarlo al escritor.

csvWriter.writeNext(record.toArray(new String[record.size()]));
Respuesta: 3

Posible duplicado: JSF 2: ¿cómo puedo obtener un valor de parámetro de contexto de web.xml usando JSF EL? Estaba acostumbrado a recuperar parámetros de contexto usando EL de esta manera $ {applicationScope.configs ...

Leí este documento explicando la memoria caché de guayaba: Caches explicadas. Entiendo lo que están haciendo refreshAfterWrite y expireAfterWrite. Sin embargo, al explicar refreshAfterWrite, el documento también ...

estamos ejecutando una aplicación de arranque de primavera con gradle. Para incluir el complemento spring-boot lo agregamos como dependencia: buildscript {dependencies {classpath ("org.springframework.boot: spring -...

El bloque de inicialización estática en la clase no pública Out no se ejecuta, pero se ejecuta el bloque de inicialización estática en la clase estática anidada snOut. ¿Cómo y por qué es esto posible? clase pública ...