FileReader.java

package fr.avenirsesr.portfolio.shared.infrastructure.utils;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class FileReader {
  private final ObjectMapper objectMapper;

  static <T> List<T> readCSV(String fileName, String separator, Function<String[], T> mapper) {
    try (var inputStream = FileReader.class.getResourceAsStream(fileName);
        var reader =
            new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {

      return reader
          .lines()
          .skip(1)
          .map(line -> line.split(separator))
          .map(mapper)
          .collect(Collectors.toList());

    } catch (IOException | NullPointerException e) {
      throw new RuntimeException("Erreur de lecture du fichier CSV", e);
    }
  }

  public <T> List<T> readJSON(String path, TypeReference<List<T>> typeRef) {
    try (InputStream is = getClass().getClassLoader().getResourceAsStream(path)) {
      if (is == null) {
        throw new IllegalStateException("File not found: " + path);
      }
      return objectMapper.readValue(is, typeRef);
    } catch (Exception e) {
      throw new RuntimeException("Error while reading " + path, e);
    }
  }
}