ÎncepețiÎncepe gratuit

Citirea fișierelor CSV în siguranță

Ești pregătit să citești un fișier CSV cu vânzări de cafea. Folosește funcțiile de validare a datelor pentru a încărca informațiile și a verifica tipurile de date.

Pachetele necesare, precum java.time și NumberUtils, au fost deja importate pentru tine.

Acest exercițiu face parte din cursul

Curățarea datelor în Java

Vezi cursul

Instrucțiuni pentru exercițiu

  • Parsează formatul șirului de date ca M/d/yy.
  • Citește cantitatea de vânzări quantity ca Integer.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

public class CoffeeSalesExample {
    private record CoffeeSales(LocalDate date, String coffeeName, String paymentMethod, Integer quantity, Double amount) {}

    private static LocalDate parseDate(String dateStr) {
    	// Parse the format of the date string
        return ____.____(dateStr, DateTimeFormatter.ofPattern("M/d/yy"));
    }

    private static String validateNumeric(String value) {
        if (NumberUtils.isParsable(value)) return value;
        throw new IllegalArgumentException("Invalid: " + value);
    }
    
    public static double parsePrice(String priceText) {
        if (NumberUtils.isParsable(priceText.replace("$", ""))) {
            return Double.parseDouble(priceText.replace("$", ""));
        }
        throw new IllegalArgumentException("Invalid price: " + priceText);
    }

    public static CoffeeSales parseSalesData(String[] fields) {
        LocalDate publishDate = parseDate(fields[0]);
        String coffeeName = fields[1];
        String paymentMethod = fields[2];
        // Read quantity as an Integer
        Integer quantity = ____.____(validateNumeric(fields[3]));
        Double amount = parsePrice(fields[4]);
        return new CoffeeSales(publishDate, coffeeName, paymentMethod, quantity, amount);
    }

    public static void main(String[] args) throws IOException, InterruptedException {
        List sales = new ArrayList<>();
        String filename = "coffee.csv";
        try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
            String line = reader.readLine();
            while ((line = reader.readLine()) != null) {
                String[] fields = line.split(",");
                sales.add(parseSalesData(fields));
            }
        }
        sales.forEach(System.out::println);
    }
}
Editează și rulează codul