сравнение количества строк, записанных в csv, с количеством строк набора результатов

Мне нужно убедиться, что csv, который я создаю из дампа набора результатов sql с использованием opencsv api, успешно работает или нет. Прямо сейчас я использую CSVWriter для записи в csv, теперь как мне использовать CSVReader для чтения количества строк в 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? также как мне получить количество строк в CSV с помощью CSVReader.

Спасибо Приянк


person pri_dev    schedule 08.03.2012    source источник


Ответы (2)


Если бы я проверял функциональность внешней библиотеки, я бы, вероятно, не стал бы использовать эту же библиотеку для этого. Возможным решением может быть повторное сканирование файла с BufferedReader и подсчет строк по мере продвижения, как показано ниже:

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

Затем вы можете сравнить lineCount с ожидаемым значением. Конечно, это может быть не самое эффективное решение, в зависимости от того, как часто вы хотите выполнять эту проверку, и размера выходных файлов.

person charlemagne    schedule 08.03.2012

можете ли вы получить количество строк, зависит от CSVReader / Writer, о котором вы говорите -

Я только что проверил, их много, и они, похоже, не указывают на какой-либо вызов API для getTotalLines () или что-то подобное, хотя я не проверял каждый из них: в отсутствие поддержки со стороны программы, которые вы используете,

Для Mac / Linux вы можете просто сказать: «wc -l», конечно, без кавычек, чтобы получить количество строк в файле.

Для окон вы можете использовать:

@ эхо выключено

setlocal enabledelayedexpansion

for / f "delims =:" %% N in ('findstr / N / R "^" "APS-Cfiles.csv" ^ | find / C ":"') установить строки = %% N

эхо% линий%

Конечно, не забудьте вычесть 1 для строки заголовка!

С наилучшими пожеланиями, Шайлен

person ombud    schedule 08.03.2012
comment
Спасибо за совет, но мне нужна проверка с использованием java, не может быть конкретной реализацией ОС. - person pri_dev; 08.03.2012
comment
что возвращает (CSVWriter) .writeAll ()? Можете ли вы зафиксировать значение и сообщить мне, если оно вернет число? Кроме того, как вы, вероятно, уже знаете, вы можете получить количество строк в наборе результатов, используя rs.getInt (0) ... если я правильно помню. Кстати, какую java-библиотеку вы используете? - person ombud; 08.03.2012