csv Datein einlesen und ausgewähltes Feld ausgeben

Tzwenn

Mitglied
Hallo zusammen,

ich bin Java-Einsteiger und habe ein Problem mit einer Aufgabenstellung. Ich möchte eine csv-Datei einlesen und ein oder mehrere Felder gezielt ausgeben.

Zeilen- und Spaltennummer habe ich bereits abgefragt, sind als Integer in zwei Variablen gespeichert.

Bei meiner Suche im Netz habe ich folgenden Code gefunden, der jedoch alls eingelesen Werte ausgibt. Kann mir jemand helfen, wie ich die Ausgabe modifizieren muss?
Java:
public class Csv_einlesen_test { 
    public static void main(String[] args) {      
        FileReader myFile = null;
        BufferedReader buff = null;
        final List<String> lines = new ArrayList<>();
        //Einlesen
        try{
            myFile = new FileReader("/home/sven/test.csv");
            buff = new BufferedReader(myFile);
            String line;
            while ((line = buff.readLine()) != null){
                System.out.println(line); //Kontrolle einlesen
                lines.add(line);
            }
           } catch (IOException e) {
               System.err.println("Error2 :" + e);             
           } finally {
            try {
                buff.close();
                myFile.close();
            } catch (IOException e) {
                System.err.println("Error2 : "+e);
                }
        }
        final String[][] valuesArray = new String[lines.size()][];
        int cnt=0;
        for (final String line : lines) {
            valuesArray[cnt++] = line.split(",");
        }
      
        //Ausgabe des Array
        for (String[] arr: valuesArray) {
               System.out.println(Arrays.toString(arr));
        }
    }


Gruß Sven
 
Zuletzt bearbeitet von einem Moderator:
Du musst in dem Teil der die Ausgabe macht entsprechende Logik einbauen dass nur die Felder ausgegeben werden die du auch möchtest ! Evtl. so:

Code:
        //Ausgabe des Array
        for (String[] arr: valuesArray) {
               for (int i=0; i<arr.length;i++) {
                  if ( // soll das i.te Feld ausgegeben werden
                       System.out.print(arr[i]+"  ");
               }
               System.out.println();  // neue Zeile
        }
 
Danke für Deine schnelle Antwort.

Ich hätte da noch ein paar Verständnisfragen:

Verstehe ich es richtig, dass ich mit dieser Anweisung alle "Zeilen" durchlaufe?
for (String[] arr: valuesArray)

Falls ja, wie baue ich hier ein, dass ich nur die z.B. 2. Zeile verarbeite?

Welche Bedingung müsste ich für die Ausgabe des 3. Feldes nutzen?

if (i=3) {
System.out.print(arr+" ");
}
 
Hey Sven,

ich finde das Beispiel aus dem Internet ein wenig schwer verständlich, vielleicht hilft dir diese vielleicht mehr.
Java:
public class CsvReader {
   
    private List<String[]> lines;
   
    public CsvReader(String path) throws IOException {
           
        lines = new ArrayList<String[]>();
       
        String record = "";
        BufferedReader reader = new BufferedReader(new FileReader(path));
           
        while((record = reader.readLine()) != null) {
            lines.add(record.split(";"));
        }
    }
   
    public String getRecord(int zeile, int spalte) {
        return lines.get(zeile - 1)[spalte - 1];
    }
   
    public List<String[]> getLines() {
        return lines;
    }
}
Java:
public class Main{
   
    public static void main(String[] args) throws IOException {
        CsvReader reader = new CsvReader("test.csv");
        System.out.println(reader.getRecord(1, 1));
    }
}

Hier habe ich eine extra Klasse erstellt die dir die komplette Csv Datei einliest. Und ähnlich wie dein Beispiel die Daten in einer Liste ablegt. Die CsvReader Klasse hat darüber hinaus aber noch eine Methode mit der du einfach mit Spalte, Zeile die jeweilige Zelle auslesen kannst. Die Exception Behandlung habe ich zur Leserlichkeit erstmal raus gelassen.

Du kannst also eine Instanz des CsvReader erstellen und die gewünschten Daten, wie gezeigt abfragen.

Beste Grüße,
Jar
 

Zurück
Oben