到达结尾后从头开始读取 csv 文件 (Java, OpenCSV)
read a csv file from the beginning after having reached the end (Java, OpenCSV)
我想使用 OpenCSV 和 Java 来计算我的特定 .csv 文件有多少行。然后,我想解析文件的每一行并做一些事情。我发现了一些与我的类似的问题,这些问题最常见的答案是使用循环来计算行数,因为 CSVReader class 没有计算它正在读取的文件的行数的函数。我的问题如下:在我计算行数之后,有没有办法在第一个循环之后从头读取文件,而不创建新的 CSVReader 对象和 String 缓冲区?提前致谢。
编辑:我最终使用了 CSVReader class 的 readAll() 成员函数。它将整个文件存储到字符串数组列表中。每行都是一个 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...
}
不确定您要做什么,但如果您真的想通过存储每一行的数据来做某事,那么您可以这样做。
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
}
我想使用 OpenCSV 和 Java 来计算我的特定 .csv 文件有多少行。然后,我想解析文件的每一行并做一些事情。我发现了一些与我的类似的问题,这些问题最常见的答案是使用循环来计算行数,因为 CSVReader class 没有计算它正在读取的文件的行数的函数。我的问题如下:在我计算行数之后,有没有办法在第一个循环之后从头读取文件,而不创建新的 CSVReader 对象和 String 缓冲区?提前致谢。
编辑:我最终使用了 CSVReader class 的 readAll() 成员函数。它将整个文件存储到字符串数组列表中。每行都是一个 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...
}
不确定您要做什么,但如果您真的想通过存储每一行的数据来做某事,那么您可以这样做。
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
}