java 解析csv文件 效率劣化_如何用Java解析CSV文件

本文介绍了如何使用Java解析CSV文件,遵循CSV文件的规则,并提供了一种修正后的解析方法。内容包括解析规则、方法实现、解析接口代码以及相关辅助方法。此外,还提及了一个Java CSV解析库供参考。
摘要由CSDN通过智能技术生成

首先看一下csv文件的规则:

csv(Comma Separate Values)文件即逗号分隔符文件,它是一种文本文件,可以直接以文本打开,以逗号分隔。windows默认用excel打开。它的格式包括以下几点(它的格式最好就看excel是如何解析的。):

①每条记录占一行;

②以逗号为分隔符;

③逗号前后的空格会被忽略;

④字段中包含有逗号,该字段必须用双引号括起来;

⑤字段中包含有换行符,该字段必须用双引号括起来;

⑥字段前后包含有空格,该字段必须用双引号括起来;

⑦字段中的双引号用两个双引号表示;

⑧字段中如果有双引号,该字段必须用双引号括起来;

⑨第一条记录,可以是字段名;

⑩以上提到的逗号和双引号均为半角字符。

下面给出一种解析方法,来自:http://blog.csdn.net/studyvcmfc/article/details/6232770,原文中有一些bug,经过修改,测试ok的代码如下:

该解析算法的解析规则与excel或者wps大致相同。另外包含去掉注释的方法。

构建方法该类包含一个构建方法,参数为要读取的csv文件的文件名(包含绝对路径)。

普通方法:

① getVContent():一个得到当前行的值向量的方法。如果调用此方法前未调用readCSVNextRecord方法,则将返回Null。

② getLineContentVector():一个得到下一行值向量的方法。如果该方法返回Null,则说明已经读到文件末尾。

③ close():关闭流。该方法为调用该类后应该被最后调用的方法。

④ readCSVNextRecord():该方法读取csv文件的下一行,如果该方法已经读到了文件末尾,则返回false;

⑤ readAtomString(String):该方法返回csv文件逻辑一行的第一个值,和该逻辑行第一个值后面的内容,如果该内容以逗号开始,则已经去掉了该逗号。这两个值以一个二维数组的方法返回。

⑥ isQuoteAdjacent(String):判断一个给定字符串的引号是否两两相邻。如果两两相邻,返回真。如果该字符串不包含引号,也返回真。

⑦ readCSVFileTitle():该方法返回csv文件中的第一行——该行不以#号开始(包括正常解析后的#号),且该行不为空

解析接口代码:

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.Vector;

public class CsvParse {

//声明读取流

private BufferedReader inStream = null;

//声明返回向量

private Vector vContent = null;

/**

* 构建方法,参数为csv文件名

* 如果没有找到文件,则抛出异常

* 如果抛出异常,则不能进行页面的文件读取操作

*/

public CsvParse(String csvFileName) throws FileNotFoundException {

inStream = new BufferedReader(new FileReader(csvFileName));

}

/**

* 返回已经读取到的一行的向量

* @return vContent

*/

public Vector getVContent() {

return this.vContent;

}

/**

* 读取下一行,并把该行的内容填充入向量中

* 返回该向量

* @return vContent 装载了下一行的向量

* @throws IOException

* @throws Exception

*/

public Vector getLineContentVector() throws IOException, Exception {

if (this.readCSVNextRecord()) {

return this.vContent;

}

return null;

}

/**

* 关闭流

*/</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值