java - Java 中的 CSV 行读取器

标签 java csv

我是初级 Java 程序员。我正在处理 CSV 文件。我有一个包含行和列的文件,如下所示:

     col1   col2   col3
row1
row2
row3

我读取了这个文件并将其存储在一个字符串中。我用换行符分解字符串以获得每一行。我有一个具有一些行名称的变量 ArrayList。我如何比较它只返回特定行?

最佳答案

正确解析 CSV 文件比乍看起来更棘手,您至少需要:

  • 尊重原文编码
  • 确保您可以导入转义分隔符,即:23,10/02/2010,"hello, world",34.5
  • 根据文件区域应用正确的日期格式和小数点格式
  • 正确对待引号

如果这是一项快速任务,我建议使用现有的库,至少有两个用于 Java 的开源 CSV 库具有非常相似的 API:

  1. Java CSV Library
  2. OpenCSV

我已经尝试从 OpenCSV 开始,但由于我有一个 600MB 的 CSV 文件,所以在逐行评估文件时它抛出了 OutOfMemory 异常。显然当前库中存在内存泄漏。

我没有时间进行调试,所以我只是切换到 Java CSV,因为它们在基本操作方面具有惊人相似的 API,而且它的工作原理非常棒。

Java CSV 允许您通过索引或列名访问列(如果文件中有标题)。

更新

使用 Java CSV Lib,你必须按照这些行做一些事情来访问单独的行(quick'n'dirty,可能无法编译):

import com.csvreader.CsvReader;

class Parser {

    public static void main (String [] args) throws Throwable {

       CsvReader reader = new CsvReader("input file name.csv",
                                        ',' /* delimiter */ );

       while (reader.readRecord()) {

            // full row, you can use regex to find 
            // any rows you specifically want
            String row = reader.getRawRecord();  

            // get value of the first field
            String col = reader.get(0);          

            // gets array of fields
            String[] cols[] = reader.getValues();            
       }

       reader.close();

    }

}

关于java - Java 中的 CSV 行读取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2346713/

相关文章:

csv - d3.js - 在可缩放、可点击的 map 上绘制点

csv - 将数组导出为 CSV

java - 什么是NullPointerException,我该如何解决?

java - 使用谷歌应用引擎的聊天机器人不回复

python - 将 pandas 表加载到 dynamoDb

ruby-on-rails - Rspec:测试 CSV 输出中的行数

linux - 如何添加各种 .csv 文件的所有列的值,仅保持单个标题和第一个标签列相同?

java - 在 Android 中长按单个项目时,如何更改所有 RecyclerView 项目的可见性?

java - LIferay 中的 Portlet 未保存到数据库会引发 InvocableTargetException

java - 如何获取请求的 URL?