【问题标题】:comparing number of line written in csv to resultset row count将 csv 中写入的行数与结果集行数进行比较
【发布时间】:2012-03-08 00:34:12
【问题描述】:

我需要确保我使用 opencsv api 从 sql 结果集转储创建的 csv 操作是否成功。 现在我正在使用 CSVWriter 写入 csv ,现在我将如何使用 CSVReader 读取 csv 中的行数(假设每个结果集行保存在 CSV 中的 1 行中)并将该计数与结果集行数进行比较。 如果两者相同,则成功或失败。

我将完整的结果集转储到 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 中的行数。

谢谢 普里扬克

【问题讨论】:

    标签: java opencsv


    【解决方案1】:

    如果我正在验证外部库的功能,我可能不会使用同一个库来执行此操作。一种可能的解决方案是使用BufferedReader 再次扫描文件,并在执行过程中计算行数,如下所示:

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

    然后您可以将lineCount 与您的期望值进行比较。当然,这可能不是最有效的解决方案,具体取决于您希望执行此检查的频率以及文件输出的大小。

    【讨论】:

      【解决方案2】:

      能否获得行号取决于您所说的 CSVReader/Writer -

      我刚查了一下,那里有一堆,他们似乎没有表明对 getTotalLines() 或类似的任何 API 调用,尽管我没有检查每一个:在没有您正在使用的程序的支持,

      对于 Mac/Linux,您可以简单地说:“wc -l”,当然不带引号,以获取文件中的行数

      对于 Windows,您可以使用:

      @echo 关闭

      setlocal enabledelayedexpansion

      for /f "delims=:" %%N in ('findstr /N /R "^" "APS-Cfiles.csv" ^| find /C ":"') 设置行=%%N

      回显 %lines%

      当然,别忘了标题行减1!

      最好, 谢伦

      【讨论】:

      • 感谢您的提示,但我需要使用 java 进行检查,不能是特定于操作系统的实现。
      • (CSVWriter).writeAll() 返回什么?你能捕捉到这个值并让我知道它是否返回一个数字吗?此外,您可能已经知道,如果我没记错的话,您可以使用 rs.getInt(0) 来获取结果集中的行数。顺便说一句,您使用的是哪个 java 库?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      • 1970-01-01
      • 2018-01-24
      • 2013-04-05
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      相关资源
      最近更新 更多