到达末尾后从头开始读取csv文件(Java,OpenCSV)

时间:2018-11-13 19:52:38

标签: java opencsv

我想使用OpenCSV和Java计算我的特定.csv文件有多少行。然后,我想解析文件的每一行并做一些事情。我发现了一些与我的问题类似的问题,这些问题最常见的答案是使用循环来计算行数,因为CSVReader类没有计算要读取文件行数的函数。我的问题如下:在对行进行计数之后,是否可以在不创建新的CSVReader对象和String缓冲区的情况下从第一个循环之后的开头读取文件?预先感谢。

编辑:我最终使用了CSVReader类的readAll()成员函数。它将整个文件存储到String数组列表。每行都是一个List节点,该行的每个条目都是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 :(得分:0)

不确定要执行的操作,但是如果确实要通过存储每一行​​的数据来执行操作,则可以执行以下操作。

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
}