OpenCSV Avoid using FileWriter and return InputStream

Aniks picture Aniks · Mar 9, 2016 · Viewed 7k times · Source

I am using OpenCsv and the new CSVWriter() method takes a Writer as an argument.

What I am trying to achieve is that to avoid writing to the file system and instead return an InputStream. I am not sure how to go about this. Not very familiar with Streams also I am using JAVA 7.

Is it possible that I could make the writeValues method return an InputStream and avoid writing the output on file system.

This is my working implementation:

private static void writeValues(String[][] cellValues) throws IOException {

    CSVWriter writer = new CSVWriter(new FileWriter("/tmp/myfile.csv"));
    for(String[] row : cellValues) { 
        writer.writeNext(row);
    }
    writer.close();
}

This is what I want to achieve. How to Convert the above method to avoid using a FileWriter.

private static InputStream writeValues(String[][] cellValues) throws IOException {

    InputStream inputStream = ?;

    CSVWriter writer = new CSVWriter(?);
    for(String[] row : cellValues) { 
        writer.writeNext(row);
    }
    writer.close();

    return inputStream;
}

Answer

Michael Kemmerzell picture Michael Kemmerzell · Mar 24, 2020

To supplement the answer JB Nizet gave:

public static byte[] getBeansAsByteArray(final List<YourBean> beans) {
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    OutputStreamWriter streamWriter = new OutputStreamWriter(stream);
    CSVWriter writer = new CSVWriter(streamWriter);

    StatefulBeanToCsv<YourBean> beanToCsv = new StatefulBeanToCsvBuilder(writer).build();
    beanToCsv.write(beans);
    streamWriter.flush();
    
    return stream.toByteArray();
}