Erste Schritte CSV-File einlesen und Daten verarbeiten

MC_Hammer

Mitglied
Hallo,

nach etwas längerer Java-Abstinenz, habe ich nun eine Projekt-Aufgabe erhalten in dem ich Daten (größere Datenmenge) aus einer CSV-Datei einlesen muss. In dieser Datei befinden sich 3 Spalten. Die erste ist mit einem Zeitstempel versehen, die zweite enthält einen Breitengrad (float-Wert) und die dritte einen Längengrad (float-Wert). Ich muss jeweils ein aufeinander folgendes Wertepaare miteinander vergleichen um daraus den Abstand zweier Koordinaten zu ermitteln und die dafür benötigte Zeit. Ich würde gern nacheinander meine Fragen hier in diesen Thread posten, wenn das in Ordnung ist, um nicht für jede kleine Frage ein neues Thema zu beginnen.

Mein Lösungsansatz sieht bisher wie folgt aus:

Ich möchte die CSV-Datei zuerst einlesen und in ein Array schreiben. Dazu bin ich auf die Bibliothek opencsv gestoßen. Ist diese sinnvoll für mein Vorhaben? Leider ist es etwas länger her als ich das letzte mal solche Bibliotheken eingebunden habe.

Ist es in dem Fall ausreichend in meiner Klasse die Bibliothek mit:
Code:
import com.opencsv.CSVReader;

einzufügen oder muss ich in Eclipse noch an anderer Stelle die Bibliothek einbinden?

Ich danke euch für eure Hilfe!
 
opencsv ist das passende dafür 😉


Zusätzlich zu dem import musst du die Lib noch zur Compile- und Laufzeit einbinden. Nutzt du irgendein Build-Tool?
 
Hallo,

ich habe jetzt leider folgendes Problem, ich habe 'opencsv' als lib eingebunden. Nun wollte ich probieren ob das einlesen funktioniert und bekomme folgende Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
at GeoDaten.geodatenberechnung.main(geodatenberechnung.java:48)

Mein Code sieht wie folgt aus:

Java:
package GeoDaten;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;
import com.opencsv.CSVReader;
import com.opencsv.CSVReaderBuilder;

public class geodatenberechnung {

    public static void main(String[] args) {
       
        BufferedReader fileReader = null;
        CSVReader csvReader = null;
        try {
            System.out.println("--- Read line by line ---");
           
            fileReader = new BufferedReader(new FileReader("/home/christian/workspace/GeoDaten/src/GeoDaten/testfahrt.csv"));
            csvReader = new CSVReader(fileReader);
            String[] record;
           
            csvReader.readNext();
            while ((record = csvReader.readNext()) != null) {
                System.out.println(record[0] + " | " + record[1] + " | " + record[2]);
            }
            csvReader.close();
           
            // -------------------------------------------
            System.out.println("\n--- Read all at once ---");
           
            fileReader = new BufferedReader(new FileReader("/home/christian/workspace/GeoDaten/src/GeoDaten/testfahrt.csv"));
            csvReader = new CSVReaderBuilder(fileReader).withSkipLines(1).build();
            List<String[]> records = csvReader.readAll();
           
            for (String[] _record : records) {
                System.out.println(_record[0] + " | " + _record[1] + " | " + _record[2]);
            }
        } catch (Exception e) {
            System.out.println("Reading CSV Error!");
            e.printStackTrace();
        } finally {
            try {
                fileReader.close();
                csvReader.close();
            } catch (IOException e) {
                System.out.println("Closing fileReader/csvParser Error!");
                e.printStackTrace();
            }
        }
       
    }

}

Was habe ich übersehen? Wo liegt der Fehler? Ich danke euch schonmal!
 
Hallo,

ich habe jetzt leider folgendes Problem, ich habe 'opencsv' als lib eingebunden. Nun wollte ich probieren ob das einlesen funktioniert und bekomme folgende Fehlermeldung:

Exception in thread "main" java.lang.NullPointerException
at GeoDaten.geodatenberechnung.main(geodatenberechnung.java:48)

Zeile 48 ist, wenn ich mich nicht verguckt habe, diese: e.printStackTrace();. Das kann keine NPE werfen. Was ist denn Zeile 48 bei dir?

Möglich wären da nur die beiden close-aufrufe im ersten catch. Wenn die null sind, muss vorher aber eine Exception geflogen sein?
 

Neue Themen


Zurück
Oben