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;
}
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();
}
Write to an OutpuStreamWriter
itself writing to a ByteArrayOutputStream
, and in the end, you'll have a byte array in memory (by calling getBytes()
on the ByteArrayOutputStream
).
You can then read from this byte array by opening a ByteArrayInputStream
on the byte array.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With