CSVReader.java

package ch.ladestation.connectncharge.services.file;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

public final class CSVReader {

    public static final String LEDSEGMENTS_CSV = "/LEDSegments.csv";
    static final String SEMICOLON_DELIMITER = ";";

    /**
     * hide utility constructor
     */
    private CSVReader() {
    }

    /**
     * reads LEDSegments.csv and returns a list of lists of integers.
     * <p>
     * The outer list corresponds to rows. the inner list to collumns.
     *
     * @return the parsed LEDSegments.csv file
     */
    public static List<List<String>> readCSV() {
        List<List<String>> records = new ArrayList<>();
        InputStream csv = CSVReader.class.getResourceAsStream(LEDSEGMENTS_CSV);
        Objects.requireNonNull(csv, "error, " + LEDSEGMENTS_CSV + " file was null");
        try (BufferedReader br = new BufferedReader(new InputStreamReader(csv, StandardCharsets.UTF_8))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] values = line.split(SEMICOLON_DELIMITER);
                records.add(Arrays.asList(values));
            }
        } catch (IOException e) {
            throw new RuntimeException("error when trying to read " + LEDSEGMENTS_CSV + ":" + e.getMessage());
        }
        return records;
    }
}