2017-07-07 7 views
0

私は、csvファイルに書き込むために、次のコードをApacheコモンで実行しようとしています。 finalResult配列のprintステートメントは、配列に入れたいものがあることを示しています。それは何らかの理由で指定されたcsvにデータを送信しません。あなたはおそらく5行にprintfで何ができるかやってコードやサードパーティのライブラリの行の数十が必要なのはなぜデータがApache Commonsでcsvに書き込まれていない

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

従来の 'try'を' catch'や 'finally'やリソース宣言なしで使用しています。これがなぜコンパイルされないのですか?さらに、彼らがバッファリングを使用しているかどうかわからないので、それらを使用して、ウィルターの後に基礎となる作家を閉じるのが最善でしょう。 – fabian

+0

finalResultの内容を質問に追加できますか?また、2つのプリントアウトステートメントの結果として何が表示されるのか? – digidude

+0

なぜ2つの 'FileWriter'がありますか?あなたは「csv」という接尾辞を持っていない人の一人にしか書いていないようです。 – Itai

答えて

1

PrintWriterを作成し、printfと書き込みます。完了しました。

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 
    } 
} 

あなたはハードコードファイル区切り/によってcsvFileを作成すべきではない、それはまた別の問題です。

+0

複雑なコードの理由は、ユーザー入力に基づいて未知の量の列を処理する必要があるためです。次に、インデックスが列ヘッダー配列のサイズに達するたびに、csvに書き込んで新しい行を作成して、きちんと整形されるようにします。私はちょうどコードを簡略化して、主な問題の解決に早く到達するようにしました – dgelinas21

+0

上記のコードですべてを行うことができます。列の数を知る必要はありません。 '、'をつけて印刷するだけで印刷できます。 –

関連する問題