一个CSV文件解析类
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
* CsvParser
* 此类参考了网上方案,在此表示感谢
* 2013-12-10 21:43:48
*/
public class CsvParser{
// Saved input CSV file pathname
private String inputCsvFile; // Space mark , ; : etc.
private String spaceMark=","; /**
* Contructor
* @param inputCsvFile
*/
public CsvParser(String inputCsvFile,String spaceMark){
this.inputCsvFile=inputCsvFile;
this.spaceMark=spaceMark;
} /**
* Contructor
* @param inputCsvFile
*/
public CsvParser(String inputCsvFile){
this.inputCsvFile=inputCsvFile;
this.spaceMark=",";
} /**
* Get parsed array from CSV file
* @return
*/
public Object[] getParsedArray() throws Exception{
List<List<String>> retval=new ArrayList<List<String>>(); String regExp = getRegExp();
BufferedReader in = new BufferedReader(new FileReader(this.inputCsvFile));
String strLine;
String str = ""; while ((strLine = in.readLine()) != null) {
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(strLine);
List<String> listTemp = new ArrayList<String>();
while (matcher.find())
{
str = matcher.group();
str = str.trim(); if (str.endsWith(spaceMark))
{
str = str.substring(0, str.length() - 1);
str = str.trim();
} if (str.startsWith("\"") && str.endsWith("\""))
{
str = str.substring(1, str.length() - 1);
if (CsvParser.isExisted("\"\"", str))
{
str = str.replaceAll("\"\"", "\"");
}
} if (!"".equals(str))
{
listTemp.add(str);
}
} // Add to retval
retval.add(listTemp);
}
in.close(); return retval.toArray();
} /**
* Regular Expression for CSV parse
* @return
*/
private String getRegExp()
{
final String SPECIAL_CHAR_A = "[^\",\\n ]";
final String SPECIAL_CHAR_B = "[^\""+spaceMark+"\\n]"; StringBuffer strRegExps = new StringBuffer();
strRegExps.append("\"((");
strRegExps.append(SPECIAL_CHAR_A);
strRegExps.append("*["+spaceMark+"\\n ])*(");
strRegExps.append(SPECIAL_CHAR_A);
strRegExps.append("*\"{2})*)*");
strRegExps.append(SPECIAL_CHAR_A);
strRegExps.append("*\"[ ]*"+spaceMark+"[ ]*");
strRegExps.append("|");
strRegExps.append(SPECIAL_CHAR_B);
strRegExps.append("*[ ]*"+spaceMark+"[ ]*");
strRegExps.append("|\"((");
strRegExps.append(SPECIAL_CHAR_A);
strRegExps.append("*["+spaceMark+"\\n ])*(");
strRegExps.append(SPECIAL_CHAR_A);
strRegExps.append("*\"{2})*)*");
strRegExps.append(SPECIAL_CHAR_A);
strRegExps.append("*\"[ ]*");
strRegExps.append("|");
strRegExps.append(SPECIAL_CHAR_B);
strRegExps.append("*[ ]*");
return strRegExps.toString();
} /**
* If argChar is exist in argStr
* @param argChar
* @param argStr
* @return
*/
private static boolean isExisted(String argChar, String argStr)
{ boolean blnReturnValue = false;
if ((argStr.indexOf(argChar) >= 0)
&& (argStr.indexOf(argChar) <= argStr.length()))
{
blnReturnValue = true;
}
return blnReturnValue;
} /**
* Test
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_not quoted_1.csv");
//CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_not quoted_2.csv");
//CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_quoted.csv");
//CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_quoted_2.csv"); //CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_1.csv",";");
//CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_2.csv",":"); Object[] arr=parser.getParsedArray();
//System.out.println(arr); for(Object obj:arr){
System.out.print("["); List<String> ls=(List<String>)obj; for(String item:ls){
System.out.println(item+",");
} System.out.println("],");
}
}
}
解析CSV文件:
Column1,Column2,Column3,Column4,Column5
Roderick Manuel,2013-02-21,59 E Brillhart Ave,67526,branch damage other impulse
Lashonda Frank,2012-11-21,418 US Hwy 100,22609,fowl house
Holly Silva,2013-09-15,16345 Old Jacksboro Hwy,13140,art sand colour tray boiling
Martin Forbes,2013-04-28,69 Spr 33,91656,bag point necessary country
Josefa Berry,2008-08-21,125 Hwy' 84 E,12604,Sort industry married safe shirt
Allyson Green,2004-11-11,425 Ranch Rd 587,35059,mother political
Tim Hopkins,2005-03-17,9559 I- 820,83598,crush. surprise station' distance from
Olen Abbott,2009-02-17,2249 Westwood Dr N,15575,acid
Ana Fowler,2011-02-19,22 State Loop 426,13409,memory poor farm adjustment
Minerva House,2009-02-18,57151 Collett Rd,45782,dry summer
将解析完得到的数组输出如下:
[Column1,
Column2,
Column3,
Column4,
Column5,
],
[Roderick Manuel,
2013-02-21,
59 E Brillhart Ave,
67526,
branch damage other impulse,
],
[Lashonda Frank,
2012-11-21,
418 US Hwy 100,
22609,
fowl house,
],
[Holly Silva,
2013-09-15,
16345 Old Jacksboro Hwy,
13140,
art sand colour tray boiling,
],
[Martin Forbes,
2013-04-28,
69 Spr 33,
91656,
bag point necessary country,
],
[Josefa Berry,
2008-08-21,
125 Hwy' 84 E,
12604,
Sort industry married safe shirt,
],
[Allyson Green,
2004-11-11,
425 Ranch Rd 587,
35059,
mother political,
],
[Tim Hopkins,
2005-03-17,
9559 I- 820,
83598,
crush. surprise station' distance from,
],
[Olen Abbott,
2009-02-17,
2249 Westwood Dr N,
15575,
acid,
],
[Ana Fowler,
2011-02-19,
22 State Loop 426,
13409,
memory poor farm adjustment,
],
[Minerva House,
2009-02-18,
57151 Collett Rd,
45782,
dry summer,
],
一个CSV文件解析类的更多相关文章
- 【Java/csv】一个CSV文件解析类(转载)
/*下文写得不错,值得学习**/ import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayLis ...
- java csv 文件 操作类
一个CSV文件操作类,功能比较齐全: package tool; import java.io.BufferedReader; import java.io.BufferedWriter; impor ...
- 【转载】 C#工具类:Csv文件转换类
CSV是逗号分隔值格式的文件,其文件以纯文本形式存储表格数据(数字和文本).CSV文件由任意数目的记录组成,记录间以某种换行符分隔:每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号 ...
- CSV文件读取类
最近项目中,经常需要读取Csv文件.基本步骤是: (1)按行读取 (2)然后将一行数据按逗号,分割为字符串数组 (3)将各列字符串转换成相应类型的数据 ,如int double类型 写了一个简单的Cs ...
- CSV文件解析
CSV(逗号分隔值文件格式) 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和 ...
- 自己用的框架写了一个PHP模版解析类
<?php if(!defined('IS_HEARTPHP')) exit('Access Denied'); /** * template.class.php 模板解析类 * * @copy ...
- CSV文件解析工具
package com.common.util; import java.io.BufferedReader; import java.io.FileInputStream; import java. ...
- php上传excle文件,csv文件解析为二维数组
解析上传的CSV文件不是什么难事,直接读取转成你想要的数组样子就OK了. public function putStoreStockIn ($filePath = '') { $file = fope ...
- Unity C# CSV文件解析与加载(已更新移动端处理方式)
在游戏开发过程中,经常要用到Excel编辑各类数据,如果可以直接用Excel支持的文件格式来读取数据,修改将非常便捷. Excel支持导出CSV类型的文件,这类文件不仅可以用Excel直接打开修改,即 ...
随机推荐
- python json5
install pip install json5 test a.json: { 'a':'b', 'aa':['b1','b2']} =========================== impo ...
- 第五章 二叉树(c)二叉树
- nyoj86-找球号(一) 【set 二分查找 hash】
http://acm.nyist.net/JudgeOnline/problem.php?pid=86 找球号(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 ...
- SSH框架整合思想
--------------------siwuxie095 SSH 框架整合思想 1.SSH 框架,即 Struts2 ...
- IIS上发布站点后URL重写失效的解决方法
在发布网站时URL重写有可能会失效,如果失效的话就需要您设置一下IIS:1.Windows XP系统或Windows 2003系统等使用以下方法:>打开IIS,主目录-〉配置-〉映射-〉在窗体左 ...
- boost x64 lib
libboost_atomic-vc150-mt-gd-x64-1_66.liblibboost_atomic-vc150-mt-s-x64-1_66.liblibboost_atomic-vc150 ...
- 机械硬盘怎么看是否4k对齐
在XP.VISTA.win7系统下,点击“开始”,“运行”,输入“MSINFO32”,点击“确定”,出现如下显示的界面,依次点击“组件/存储/磁盘”,查看“分区起始偏移”的数值,如果不能被4096整除 ...
- iOS 11 scroll滚动偏移,tableview偏移44,获取view的宽和高
1. tableview 的头部 有44的偏移量 1>.设置 tableview的 属性 tableView.scrollIndicatorInsets = UIEdgeInsets.zero ...
- LayDate 时间选择插件的使用介绍 (低版本1.0好像是)
<span style="font-size:18px;"><!doctype html> <html> <head> <me ...
- 在windows系统下安装oracle 11g
oracle 11g 安装在windows server 2012 系统下. 最近,需要配置数据库,要求在windows操作系统下,安装oracle 11g 数据库,因为以前没有安装过,所以成功后, ...