2012-03-08 51 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