我已經創建了一個Web應用程序模塊來將CSV文件導入到數據庫。導入過程之後,用戶將顯示摘要,例如輸入文件中的記錄總數,導入到db的良好記錄總數以及被拒絕的記錄總數。用戶可以下載成功和錯誤記錄進行驗證。使用SuperCSV分析器時出現問題
問題是一些重複記錄被追加到成功和錯誤文件。
記錄總數:2099
的良好記錄數:1694
跳過的記錄數:405
點擊下載成功文件:Import_20121012184828_success.csv
點擊例如,用戶如下得到一個消息要下載錯誤文件:Import_20121012184828_errors.csv
當我們檢查db時,表中記錄的數量正好是'1694'(與預期的好記錄數相同)。但是在Import_20121012184828_success.csv文件中有'1741'記錄。但在eclipse控制檯中,它的打印方式與db相同,即在最後一次成功記錄之後不會有重複。所以一旦退出循環,當我調用successCsvMapWriter.close();和errorCsvMapWriter.close();一些從緩衝區中將記錄加起來的地方。我無法弄清楚這一點。
注意:對於少量的輸入,我根本沒有注意到任何問題。試用版本1.52和2.0.0測試版。
以下是創建結果文件的代碼:
File successFile = new File(csvFileDetails.getSuccessFileUrl());
File errorFile = new File(csvFileDetails.getErrorFileUrl());
// Create result files.
successFile.createNewFile();
errorFile.createNewFile();
String[] header = csvFileDetails.getHeader();
String[] errorFileHeader = ArrayUtils.add(header,
CatalogImportConstanst.CSV_ERROR_HEADER);
// Also tried CsvPreference.STANDARD_PREFERENCE
ICsvMapWriter successCsvMapWriter = new CsvMapWriter(new BufferedWriter(
new FileWriter(successFile)), CsvPreference.EXCEL_PREFERENCE);
ICsvMapWriter errorCsvMapWriter = new CsvMapWriter(new BufferedWriter(
new FileWriter(errorFile)), CsvPreference.EXCEL_PREFERENCE);
successCsvMapWriter.writeHeader(header);
successCsvMapWriter.flush();
errorCsvMapWriter.writeHeader(errorFileHeader);
errorCsvMapWriter.flush();
int errorCount = 0;
int successCount = 0;
for (Map<String, String> csvRecord : csvAsList) {
if (csvRecord.get(CatalogImportConstanst.CSV_ERROR_HEADER) != null
&& csvRecord.get(CatalogImportConstanst.CSV_ERROR_HEADER).trim().length() > 0) {
errorCsvMapWriter.write(csvRecord, errorFileHeader);
errorCsvMapWriter.flush();
errorCount++;
System.out.println("Error record: "+ csvRecord);
} else {
successCsvMapWriter.write(csvRecord, header);
successCsvMapWriter.flush();
successCount++;
System.out.println("Success record: "+ csvRecord);
}
}
successCsvMapWriter.close();
errorCsvMapWriter.close();
在此先感謝。
問題出在下載部分,而不是解析器,我忙於另一個任務,因此延遲迴應。請原諒我的愚蠢。 – Leejoy