2012-03-08 47 views
0

我需要確保使用opencsv api從sql結果集轉儲創建的csv操作是否成功。 現在我正在使用CSVWriter寫入csv,現在我將如何使用CSVReader讀取csv中的行數(假設每個結果集行都以CSV格式保存在1行中),並將該數與結果集行數進行比較。 如果兩者相同,那麼它是成功的,否則就是失敗。比較在csv中寫入的行數與結果集行計數

我傾倒滿結果集到CSV文件如下

  File csvfile = new File ("erpimport_"+ getDateTimeString()+ ".csv"); 
      CSVWriter writer = new CSVWriter(new FileWriter(csvfile), ',','"',';'); 
      boolean includeHeaders = true; 
      ResultSet rs = dbtype.executeQuery(sQuery); 
      writer.writeAll(rs, includeHeaders); 
      writer.close(); 

是這個檢查測試寫入到csv的成功或失敗的一個有效方法是什麼? 也是如何使用CSVReader獲取CSV的行數。

感謝 Priyank

回答

1

如果我驗證外部庫的功能,我可能不會使用相同的庫來做到這一點。一個可能的解決方案是通過文件再次用BufferedReader掃描,使線的計數,當您去,如下:

BufferedReader in = new BufferedReader(new File("SomeFile.csv")); 
int lineCount = 0; 
while((String line = in.readLine()) != null) 
    ++lineCount; 

然後,你可以與你的期望值比較lineCount。當然,這可能不是最有效的解決方案,具體取決於您想要執行此檢查的頻率以及文件輸出的大小。

+0

我得到了基本解決方案運行,但這是更短。謝謝.. – 2012-03-08 02:49:40

0

是否可以得到行號數取決於CSVReader /作家你談論 -

我只是檢查,並有一羣人離開那裏,他們沒似乎並沒有顯示任何API調用getTotalLines()或一些這樣的,雖然我沒有檢查他們每一個:在沒有從您正在使用的程序支持,

對於Mac/Linux,你可以簡單地說:「wc -l」,當然不包括引號,以獲得文件中的行數

對於窗,可以使用:

@迴響

SETLOCAL enabledelayedexpansion

FOR/F 「delims =」 %% N的('FINDSTR/N/R 「^」 「APS-Cfiles.csv」^ |發現/ C 「:」')做組線= %%Ñ

回聲%線路%

當然,不要忘記減去1爲標題行!

最佳, Shailen

+0

感謝您的提示,但我需要使用java的檢查,不能是操作系統特定的實現。 – 2012-03-08 01:06:10

+0

(CSVWriter).writeAll()返回什麼?你能捕捉到價值並讓我知道它是否返回一個數字? 另外,正如你可能已經知道的,如果我沒有記錯,你可以通過使用rs.getInt(0)來獲得結果集中的行數。 順便說一句,你正在使用哪個java庫? – ombud 2012-03-08 01:11:00