Create CSV file without saving it to disk

66 Views Asked by At

How can I use Java to create a CSV file as a byte array from a String input - so not as a "java.io.File" ? Later on I need to send the file as payload on a REST API endpoint so saving on disk is not needed. This is what I have until now, is it any good ?

StringBuilder csv = new StringBuilder();
csv.append("column1;column2\r\n");
csv.append("cell1;cell2\r\n");
byte[] csvByteArray = csv.toString().getBytes();

I am using Java 17.

2

There are 2 best solutions below

0
chameerar On

You can use something like this.

String csvString = "column1, column2\ncell1, cell2\n";
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try (OutputStreamWriter writer = new OutputStreamWriter(outputStream)) {
    writer.write(csvString);
}
byte[] output = outputStream.toByteArray();
0
Selaka Nanayakkara On

Use the below method:

private static byte[] createCsvByteArray(String csvContent) throws IOException {
            try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
                outputStream.write(csvContent.getBytes(StandardCharsets.UTF_8));
                return outputStream.toByteArray();
            }
        }

Refer the full working code below:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class CsvByteArrayExample {

    public static void main(String[] args) {
        

        try {
                        
           StringBuilder csv = new StringBuilder();
             csv.append("column1;column2\r\n");
             csv.append("cell1;cell2\r\n");

            byte[] csvByteArray = createCsvByteArray(csv.toString());
            System.out.println(new String(csvByteArray, StandardCharsets.UTF_8));

            // Send it to your desired API

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

    private static byte[] createCsvByteArray(String csvContent) throws IOException {
        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            outputStream.write(csvContent.getBytes(StandardCharsets.UTF_8));
            return outputStream.toByteArray();
        }
    }
}

Refer the working code sample here