2017-02-24 4 views
0

ich eine CSV-Datei lese, die wie folgt aussieht:Lesen CSV-Datei in Java mit Kopf- und mehrere Spalten

Red Blue Green 
1st Y N  
2nd Y Y  N 
3rd N   Y 

ich die Ausgabe so etwas wie

1. Red Y
ersten sein wollen blau N
2. Red Y
2. blau Y
2. Grün N
3. Red N
3. Grün Y

Ich ziehe die Farbenreihe in ein Array, aber ich bin mir nicht sicher, wie ich meine gewünschte Ausgabe erhalten soll. Unten ist mein Code so weit:

public String readFile(File aFile) throws IOException { 
    StringBuilder contents = new StringBuilder(); 
    ArrayList<String> topRow = new ArrayList<String>(); 

    try { 
     BufferedReader input = new BufferedReader(new FileReader(aFile)); 

     try { 
      String line = null; 

     while ((line = input.readLine()) != null){ 
      if(line.startsWith(",")) { 
       for (String retval: line.split(",")) { 
       topRow.add(retval); 
       //System.out.println(retval); 

       } 
      } 
     } 
     } 
     finally { 
     input.close(); 
     } 
    } 
    catch (IOException ex){ 
     ex.printStackTrace(); 
    } 

    return contents.toString(); 
} 
+0

DO neu erfinden das Rad nicht. Verwenden Sie eine vorhandene *** debugged *** CSV-Bibliothek (es gibt mehrere). –

Antwort

1

Die erste Zeile muss als Array/Liste gelesen und gespeichert werden (ich ziehe Array hier, da es schneller sein wird). Dann müssen nachfolgende Zeilen analysiert und gespeichert werden, wobei der Spaltenname aus der ersten Zeile abgerufen und jetzt als Array gespeichert wird.

Im Code habe ich direkt einen String mit Zeilenumbrüchen geschrieben, ich schlage vor, eine String Array Liste (der Länge 3) zu verwenden, damit sie für zukünftige Aktionen einfach verwendet werden kann.

public String readFile(File aFile) throws IOException { 

String data = ""; 

try { 
    BufferedReader input = new BufferedReader(new FileReader(aFile)); 
    String line = null; 
    int cnt = 0; 
    String[] topRow = new String[0]; 
    while ((line = input.readLine()) != null){ 
     if(cnt==0){ 
      String[] l = line.split(","); 
      topRow = new String[l.length-1]; 
      for(int i= 0; i<l.length-1; i++){ 
       topRow[i] = l[i+1]; 
      } 
     } 
     else{ 
      String[] l = line.split(","); 
      for(int i= 1; i<Math.min(l.length, topRow.length+1); i++){ 
       if(!l[i].equals("")){ 
        String row = ""; 
        row = l[0]; 
        row = row + " " + topRow[i-1]; 
        row = row + " " + l[i]; 
        if(data.equals(""))data = row; 
        else data = data + "\n" + row; 
       } 
       } 
     } 
     cnt++; 
    } 
} 
catch (IOException ex){ 
    ex.printStackTrace(); 
} 
return data; 

}