我想使用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...
}
答案 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
}