2017-07-07 1 views
0

Ich versuche, den folgenden Code mit Apache Commons auszuführen, um es in eine CSV-Datei zu schreiben. Die print-Anweisung für das finalResult-Array zeigt, dass es das enthält, was ich darin enthalten wollte. Es sendet die Daten aus irgendeinem Grund nicht einfach an den angegebenen csv.Daten werden nicht in csv mit Apache Commons geschrieben

public void handle(ActionEvent runButton) { 
    String csvFile = (userHomeFolder + "/" + fileName.getText() + ".csv"); 
    FileWriter writer = new FileWriter(csvFile); 
    try { 

     final Object [] FILE_HEADER = columnHeaders.toArray(); 
     int modval = 2; 
     final String NEW_LINE_SEPARATOR = "\n"; 
     FileWriter fileWriter; 
     CSVPrinter csvFilePrinter; 
     CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR); 
     List rowResult = new ArrayList(); 

     fileWriter = new FileWriter(fileName.getText()); 
     csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat); 

     try { 

      //CREATE CSV FILE HEADER 
      System.out.println("File header: " + FILE_HEADER); 
      csvFilePrinter.printRecord(FILE_HEADER); 

      for(int y = 0; y < finalResult.size(); y++) { 

       if(y % modval == 0) { 
        rowResult.add(finalResult.get(y)); 
        csvFilePrinter.printRecord(rowResult); 
        System.out.println(rowResult); 
        rowResult.clear(); 
       }else { 
        //this means it is not the last value in the row 
        rowResult.add(finalResult.get(y)); 
        System.out.println("fr: " + finalResult.get(y)); 
       } 

      } 

     } catch (Exception e) { 
      System.out.println("Error in csvFileWriter"); 
      e.printStackTrace(); 

     } finally { 
      try { 
       fileWriter.flush(); 
       fileWriter.close(); 
       csvFilePrinter.close(); 
      } catch (IOException e) { 
       System.out.println("Error while flushing/closing"); 
      } 
     } 
    } 
} 
    //below catches any errors for any of the above work 
    catch (Exception e) { 
     e.printStackTrace(); 
     System.err.println(e.getMessage()); 
    } 
+0

Sie verwenden eine konventionelle 'try' ohne' catch' oder 'finally' oder Ressourcendeklaration, weshalb dies nicht kompiliert! Außerdem wäre es wahrscheinlich am besten, die zugrunde liegenden Writer zu schließen, nachdem der Administrator sie verwendet hat, da Sie nicht wissen, ob sie Pufferung verwenden ... – fabian

+0

können Sie den Inhalt von finalResult zu der Frage hinzufügen. auch wenn Sie ausführen, was sehen Sie als Ergebnis Ihrer zwei Ausdruckanweisungen? – digidude

+0

Warum haben Sie zwei 'FileWriter's? Es sieht so aus, als ob du immer nur an einen von ihnen schreibst - welcher ist nicht der mit dem 'csv' Suffix? – Itai

Antwort

1

Warum brauchen Sie Dutzende von Zeilen Code und eine Drittanbieter-Bibliothek zu tun, was mit printf in wahrscheinlich 5 Zeilen getan werden? Erstellen Sie eine PrintWriter und schreiben Sie mit printf. Erledigt.

try (PrintWriter pw = new PrintWriter(csvFile)) { 
    pw.printf("%s\n", FILE_HEADER); 

    for(int i = 0; i < finalResult.size(); i+=2) { // no need to modulo 
     pw.printf("%s\n", finalResult.get(i)); // no idea what type finalResult.get(i) is, format it if you need to 
    } 
} 

Sie sollten nicht csvFile durch Hartcodierung der Datei Separator / erschaffen, aber das ist ein anderes Thema.

+0

Der Grund für den komplexen Code lag darin, dass er basierend auf Benutzereingaben eine unbekannte Anzahl von Spalten verarbeiten muss. Dann möchte ich, dass es in einen CSV schreibt und eine neue Zeile jedes Mal erstellt, wenn der Index die Größe des Spaltenkopf-Arrays erreicht, so dass er sauber formatiert ist. Ich habe den Code vereinfacht, um schneller zur Hauptproblemlösung zu kommen – dgelinas21

+0

Sie können das alles im obigen Code tun. Sie müssen die Anzahl der Spalten nicht kennen, fügen Sie einfach alles an, was Sie haben, mit, und drucken Sie. –

Verwandte Themen