csvParser.getRecords () возвращает пустой, когда есть записи в CSVParser - PullRequest
0 голосов
/ 24 сентября 2018

Я использую следующую зависимость для чтения файла CSV:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>

Ниже приведен код, который я написал для чтения файла CSV:

Reader reader = Files.newBufferedReader(Paths.get(file.getPath()));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT);
for(CSVRecord csvRecord: csvParser) {
     System.out.println(csvRecord.get(0));
}

Я могучитать каждую строку из CSV-файла вышеуказанным методом.Но csvParser.getRecords ();возвращается пустым.Я хочу общее количество строк в файле CSV.Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Внимательно прочитайте getRecords () javadoc (выделено мое):

Возвращенное содержимое начинается с текущей позиции синтаксического анализа в потоке.

Вы сказали:

Но csvParser.getRecords ();возвращается пустым.Я хочу общее количество строк в файле CSV.Как я могу это сделать?

Вы должны вызвать csvParser.getRecords().size(); перед итерацией записей.Затем итерируйте их.

Например:

List<Records> records = csvParser.getRecords();
int nbRecords = records.size();
for(CSVRecord csvRecord: records) {
     System.out.println(csvRecord.get(0));
}
0 голосов
/ 26 сентября 2018

univocity-parsers имеет встроенную подпрограмму getInputDimension, которая предоставляет вам эту информацию - она ​​должна быть как минимум в 6 раз быстрее, чем вы пытаетесь использовать commons-csv.

Этот вкладыш сделает это:

int lines = new CsvRoutines().getInputDimension(new File("/path/to/your.csv")).rowCount();

Надеюсь, это поможет.

Отказ от ответственности: я являюсь автором этой библиотеки.Это с открытым исходным кодом и бесплатно (лицензия Apache 2.0)

0 голосов
/ 24 сентября 2018

Вы можете stream делать все, что можете for, поэтому вы должны иметь возможность

StreamSupport.stream(csvParser.spliterator(), false).count()

Примечание: он все равно будет распределять записи (без необходимости) таким образом.

...