当前位置: 首页 > 知识库问答 >
问题:

在到达末尾后从头开始读取csv文件(爪哇,开放CSV)

屠泰平
2023-03-14

我想用OpenCSV和Java来计算一个特定的。我的csv文件有。然后,我想解析文件的每一行并做一些事情。我发现了一些与我的问题类似的问题,这些问题最常见的答案是使用循环来计算行数,因为CSVReader类没有计算它正在读取的文件行数的函数。我的问题是这样的:在我数完行数之后,有没有办法在第一次循环之后从头开始读取文件,而不创建新的CSVReader对象和字符串缓冲区?提前感谢。

编辑:我最终使用了CSVReader类的readAll()成员函数。它将整个文件存储到字符串数组列表中。每一行都是一个列表节点,该行的每个条目都是字符串数组中的字符串。这样,您也可以很容易地获得行数,如下所示:

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个答案

闾丘玮
2023-03-14

不确定您要做什么,但如果这真的是您想要通过存储每行的数据来做的事情,那么这就是您可以做的。

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
}
 类似资料:
  • 问题内容: 我需要知道如何从python文件中读取行,以便首先读取最后一行并以这种方式继续进行操作,直到光标到达文件的开头为止。有任何想法吗? 问题答案: 通过至少三种方法可以解决此问题的一般方法,即按行反向反向读取文本文件。 普遍的问题是,由于每行的长度可以不同,因此您无法事先知道文件中每行的起始位置,也不知道其中有多少行。这意味着您需要对问题应用一些逻辑。 通用方法#1:将整个文件读入内存 使

  • 具有 您可以轻松地在python中读取YAML文件,但它没有得到在末尾我到达错误(与): 但YAML规范允许: YAML使用三个破折号(“--”)将指令与文档内容分开。如果没有指令,这也可以作为文档开始的信号。三个点(“…”)指示文档的结束,但不启动新文档,用于通信通道。 那么,你怎么看这个 在python中?

  • 问题内容: 我对此有一个文件模拟:… 我想从存在“ HDK1001”字样的行开始阅读,并在世界“ HDK7564”字样处结束阅读 我尝试使用此代码,但无法执行限制 请帮帮我 问题答案: 试试这个代码。

  • 因此,我有一个扫描仪,它可以使用while(file.hasNext())读取多行的文本文件,但是在它到达文本文件的末尾之后,我该如何制作它,以便在单独的while循环中重新开始读取行?

  • 我使用opencsv 2.3写入csv文件。 此代码将每行写入单个单元格,例如a_1“28”。 如何将写入第一列,将写入第二列? 更新1:我认为这段代码适用于opencsv 3.1,但似乎不适用于早期版本。

  • 我是R的新手,想读一个csv文件。但是当我试图阅读它时,我遇到了错误。我的csv文件如下: 当我在RStudio中使用此命令时,我得到了错误:命令: 错误: 读取时出错。表(file=file,header=header,sep=sep,quote=quote,:不允许重复的“row.names” 我还尝试删除错误并使用此命令: 但是当我查看输出时,它不能保持方阵的结构。你能帮我做什么吗?