我是初级 Java 程序员。我正在处理 CSV 文件。我有一个包含行和列的文件,如下所示:
col1 col2 col3
row1
row2
row3
我读取了这个文件并将其存储在一个字符串中。我用换行符分解字符串以获得每一行。我有一个具有一些行名称的变量 ArrayList。我如何比较它只返回特定行?
最佳答案
正确解析 CSV 文件比乍看起来更棘手,您至少需要:
- 尊重原文编码
- 确保您可以导入转义分隔符,即:23,10/02/2010,"hello, world",34.5
- 根据文件区域应用正确的日期格式和小数点格式
- 正确对待引号
如果这是一项快速任务,我建议使用现有的库,至少有两个用于 Java 的开源 CSV 库具有非常相似的 API:
我已经尝试从 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/