CSV(逗号分隔值文件格式)

       逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。CSV文件格式的通用标准并不存在,但是在RFC 4180中有基础性的描述。使用的字符编码同样没有被指定,但是7-bitASCII是最基本的通用编码。
      java解析CSV文件的通用方法:
      其它辅组类参考   http://www.cnblogs.com/wshsdlau/p/5643862.html

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import com.boguan.bte.service.common.IExcelRowReader; /**
* 名称: CsvParser.java<br>
* 描述: <br>
* 类型: JAVA<br>
* 最近修改时间:2016年7月6日 上午10:22:34<br>
*
* @since 2016年7月6日
* @author
*/
public class CsvReader { /**
* Space mark , ; : etc.
*/
private String spaceMark = ","; /**
* CSV固定只有SHEET_NUM=0
*/
private final static int SHEET_NUM = ; /**
* Contructor
*
* @param inputCsvFile
*/
public CsvReader() {
} /**
* 行读取
*/
private IExcelRowReader rowReader; public void setRowReader(IExcelRowReader rowReader) {
this.rowReader = rowReader;
} /**
* 从CSV文件中获取数组
*
* @return
* @throws IOException
*/
public void process(String inputCsvFile) throws IOException {
BufferedReader in = null;
try {
in = new BufferedReader(new FileReader(inputCsvFile));
List<List<String>> retval = new ArrayList<List<String>>();
String regExp = getRegExp();
String strLine;
String str = "";
int rowNum = ;
List<String> listTemp = null;
while ((strLine = in.readLine()) != null) {
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(strLine);
listTemp = new ArrayList<String>();
while (matcher.find()) {
str = matcher.group();
str = str.trim();
if (str.endsWith(spaceMark)) {
str = str.substring(, str.length() - );
str = str.trim();
}
if (str.startsWith("\"") && str.endsWith("\"")) {
str = str.substring(, str.length() - );
if (CsvReader.isExisted("\"\"", str)) {
str = str.replaceAll("\"\"", "\"");
}
}
if (!"".equals(str)) {
listTemp.add(str);
}else{
listTemp.add(" ");
}
}
retval.add(listTemp);
rowReader.getRows(SHEET_NUM, rowNum, listTemp);
rowNum++;
}
} finally {
if (in != null) {
in.close();
}
}
} /**
* 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) >= ) && (argStr.indexOf(argChar) <= argStr.length())) {
blnReturnValue = true;
}
return blnReturnValue;
} }
   
 
 

CSV文件解析的更多相关文章

  1. CSV文件解析工具

    package com.common.util; import java.io.BufferedReader; import java.io.FileInputStream; import java. ...

  2. 一个CSV文件解析类

    import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.ut ...

  3. php上传excle文件,csv文件解析为二维数组

    解析上传的CSV文件不是什么难事,直接读取转成你想要的数组样子就OK了. public function putStoreStockIn ($filePath = '') { $file = fope ...

  4. Unity C# CSV文件解析与加载(已更新移动端处理方式)

    在游戏开发过程中,经常要用到Excel编辑各类数据,如果可以直接用Excel支持的文件格式来读取数据,修改将非常便捷. Excel支持导出CSV类型的文件,这类文件不仅可以用Excel直接打开修改,即 ...

  5. 【Java/csv】一个CSV文件解析类(转载)

    /*下文写得不错,值得学习**/ import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayLis ...

  6. 解析 csv文件 java ***最爱那水货

    /** * csv文件解析 <br> * wx 微信明细数据 第1行是标题 ,最后2行 是总结 提取数据需要过滤<br> * zfb 支付宝明细数据 前4行 和最后4行是总结 ...

  7. php解析.csv文件

    public function actionImport() { //post请求过来的 $fileName = $_FILES['file']['name']; $fileTmpName = $_F ...

  8. 如何用Java解析CSV文件

    首先看一下csv文件的规则: csv(Comma Separate Values)文件即逗号分隔符文件,它是一种文本文件,可以直接以文本打开,以逗号分隔.windows默认用excel打开.它的格式包 ...

  9. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

随机推荐

  1. 【面试】Python面试题库

    https://blog.csdn.net/ChenVast/article/details/81451460 第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Py ...

  2. 使用node.js进行API自动化回归测试

    概述 传统的QA自动化测试通常是基于GUI的,比如使用Selenium,模拟用户在界面上操作.但GUI测试的开发.维护成本和运行的稳定性一直是测试界的老大难问题.投入大量的人力物力开发.维护.运行,却 ...

  3. Sql Server 向上取整、向下取整、四舍五入取整

    ==================================================== [四舍五入取整截取] select round(55.56,0) ============== ...

  4. 语义分割的简单指南 A Simple Guide to Semantic Segmentation

    语义分割是将标签分配给图像中的每个像素的过程.这与分类形成鲜明对比,其中单个标签被分配给整个图片.语义分段将同一类的多个对象视为单个实体.另一方面,实例分段将同一类的多个对象视为不同的单个对象(或实例 ...

  5. 移植marvell poncat3 demo板的总结

    1.arm cpu自带的bootrom, 已经初始化好串口.SPI等外设,只要硬件设置好从SPI FLASH启动,则cpu自带的bootrom会自动打印出一些信息,显示出从SPI FLASH启动,驱动 ...

  6. PopupWindow 弹出时背景变暗

    下面的PopupWindow  的高是相对于屏幕高设计,宽是获取的某一个控件的宽设置,位置位于某控件的上方,红色部分是设置弹出时屏幕变暗的. //设置contentView View contentV ...

  7. JavaScript大杂烩18 - Web开发的MVVM模式

    MVC VS. MVP VS. MVVM  了解MVVM模式之前,我们先来简单了解一下从MVC到MVVM的变迁.这个变迁是耦合从紧到松的变迁,是对依赖处理的进化,是应对变化技术的成熟. MVC  MV ...

  8. Centos7安装搭建Bugzilla 5.0

    1.安装准备: Centos7保证网络连通,如果网络不能连通,可通过配置yum源使用代理服务. vim /etc/yum.conf # The proxy server - proxy server: ...

  9. linux 系统中用root切换到普通用户时显示的异常如-bash-4.1$

    解决办法: 其实就是普通用户的家目录缺少配置文件导致: [root@xxx ~]# su - oldboy -bash-4.1$ 原因是普通用户的家目录下缺少文件: [root@xxx ~]# ls ...

  10. Business talking in English

    Talking one: A: Microsoft, this is Steve. B: Hi Steve, this is Richard from Third Hand Testing. I am ...