читать файл csv с начала после достижения конца (Java, OpenCSV) - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу использовать OpenCSV и Java для подсчета количества строк в моем конкретном файле .csv. Затем я хочу проанализировать каждую строку файла и сделать что-то еще. Я нашел несколько вопросов, похожих на мои, и наиболее распространенным ответом на эти вопросы было использование цикла для подсчета строк, так как класс CSVReader не имеет функции, которая считает строки файла, который он читает. Мой вопрос заключается в следующем: после того, как я посчитал строки, есть ли способ прочитать файл с начала после первого цикла, не создавая новый объект CSVReader и буфер строк? Заранее спасибо.

РЕДАКТИРОВАТЬ: я закончил с использованием функции-члена readAll () класса CSVReader. Он сохраняет весь файл в массиве List of String. Каждая строка является узлом списка, причем каждая запись строки является строкой в ​​массиве String. Таким образом, вы также можете очень легко получить количество строк, например:

List<String[]> records = csvReader.readAll();
int no_of_rows = records.size();

import com.opencsv.CSVReader;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;

public class CSV_Reader {
private static final String SAMPLE_CSV_FILE_PATH = "some_path";

public static void main(String[] args) {
    try {
        Reader reader = Files.newBufferedReader(Paths.get(SAMPLE_CSV_FILE_PATH));
        System.out.println("before new object");
        CSVReader csvReader = new CSVReader(reader);
        String[] nextRecord;
        System.out.println("before while");

        int no_of_rows = 0;
        while ( (nextRecord = csvReader.readNext()) != null ) {
            no_of_rows++;
        }

        System.out.println("Number of lines is: " + no_of_rows );

        String[] string_vector = new String[no_of_rows];
        while ((nextRecord = csvReader.readNext()) != null) {
            //I want to do some stuff here. It doesn't enter the loop as it is now...
        }

1 Ответ

0 голосов
/ 13 ноября 2018

Не уверен, что вы пытаетесь сделать, но если это действительно то, что вы хотите сделать, сохраняя данные каждой строки, то вот что вы можете сделать.

CSVReader csvReader = new CSVReader(reader);
List<List<String>> rows = new ArrayList<>();
String[] nextRecord;
while ((nextRecord = csvReader.readNext()) != null) {
  rows.add(Arrays.asList(nextRecord)); //rows is a list of list
  //do whatever you want to do
}
...