CSV 文件解析

介绍

    在很多时候,数据是以CSV文件格式存放的。在提取CSV数据时,我们借助javacsv这个开源工具来处理,还是比较方便。

javacsv in pom.xml of Maven

		<dependency>
			<groupId>net.sourceforge.javacsv</groupId>
			<artifactId>javacsv</artifactId>
			<version>2.0</version>
		</dependency>
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import util.CommonTool;

import com.csvreader.CsvReader;

/**
 * @author shengshu
 *
 */
public class CsvCmHandle {
	private static final Logger logger = LogManager.getLogger(CsvCmHandle.class);

	private static Map<String, Map<String, String>> cmMap = new ConcurrentHashMap<String, Map<String, String>>();

	/**
	 * *
	 * <p>
	 * Read CSV file and store records into Map.
	 *
	 * @param csvFilePath
	 * @return
	 */
	public static Map<String, Map<String, String>> csvCmHandle(String csvFilePath) {
		logger.info("CSV File: " + csvFilePath);

		Map<String, String> cmRecordMap = null;
		String fileName = FilenameUtils.getBaseName(csvFilePath);

		try {
			CsvReader csvReader = new CsvReader(csvFilePath);

			csvReader.readHeaders();

			// Get CSV header array
			String[] csvHeaderArray = csvReader.getHeaders();

			// Ignore the headers when start to read records
			while (csvReader.readRecord()) {
				String[] csvRecordValueArray = csvReader.getValues();
				int csvRecordValueArrayLength = csvRecordValueArray.length;

				StringBuilder lineRecordStringBuilder = new StringBuilder();

				for (int index = 0; index < csvRecordValueArrayLength; index++) {
					lineRecordStringBuilder.append(csvRecordValueArray[index]);
				}

				// Continue next cycle when it's empty record
				if (StringUtils.trimToEmpty(lineRecordStringBuilder.toString()).equals("")) {
					break;
				}

				int csvHeaderArrayLength = csvHeaderArray.length;
				cmRecordMap = new ConcurrentHashMap<String, String>();

				for (int index = 0; index < csvHeaderArrayLength; index++) {
					String fieldName = csvHeaderArray[index];

					String fieldValue = StringUtils.trimToEmpty(CommonTool.convertReserveSymbel(csvReader.get(fieldName), false));
					logger.info("Field Name = Value: " + fieldName + " = " + fieldValue);

					// Put fieldName(Key) and fieldValue(Value) into Map as one record
					cmRecordMap.put(fieldName, fieldValue);
				}
			}

			csvReader.close();

			// Store entire CSV records into Map(Key: fileName; Value: recordMap)
			cmMap.put(fileName, cmRecordMap);
		} catch (FileNotFoundException fnfe) {
			fnfe.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}

		return cmMap;
	}
}
时间: 2024-09-14 20:44:15

CSV 文件解析的相关文章

简单的csv文件解析

csv文件的结构很简单,最基本的规则,就是用逗号分隔每一个单元格,用换行( 或者 )分隔每一列.其中需要注意的就是双引号为特殊的转义字符.详细的csv文件格式定义,在rfc4180中,主要的定义为: file = [header CRLF] record *(CRLF record) [CRLF] header = name *(COMMA name) record = field *(COMMA field) name = field field = (escaped / non-escape

使用boost::spirit实现的CSV文件解析类

boost::spirit真是不错的说.... #include <iostream>#include <iterator>#include <vector>#include <string>#include <boost/spirit/core.hpp>#include <boost/spirit/iterator/file_iterator.hpp>using namespace std;using namespace boost

java数组-解析csv文件为数组怎么做?

问题描述 解析csv文件为数组怎么做? 小弟,新人,第一次问问题,大神们,帮我看看怎么弄-有一个csv文件的数据文件(里面大概存了200条的数据)怎样把它处理一下,写入到数据库中呢?要求3分钟内实现,插入完成! PS--要用批处理吗? 解决方案 http://lqcjdx.blog.163.com/blog/static/207489241201356111749932/ 解决方案二: CSV 文件解析解析CSV文件csv文件格式化数组 解决方案三: 建一个跟csv列对应的表,在plsql里,s

《精通自动化测试框架设计》—第2章 2.7节使用CSV文件

2.7 使用CSV文件 CSV[1]的全称是Comma Separate Values,即以逗号为分隔符,每条记录占一行的一种文件格式.当然分隔符并不限制于逗号,因此其另一个名字叫做Character Separated Values.这种古老的文件格式早在20世纪60年代就已出现,被使用于IBM OS360上,远早于个人电脑时代的来临.时至今日,CSV文件依然顽强并且广泛地使用着,特别是在程序间交换数据的场合.例如,在某些ERP系统中,作为安装的一部分,在完成了二进制可执行文件的安装之后,需要

asp.net+js 实现无刷新上传解析csv文件的代码_javascript技巧

前阵子工作中用到,贴上代码,仅保留上传有关的代码,发现code其实很少. 上传页面html/js 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht

java解析wenjia-操作csv文件操作里边的数据 最后写入excel中

问题描述 操作csv文件操作里边的数据 最后写入excel中 文件是这样的 第一行是列名 ,第二行是对应的数据(11对应),要求是把每一列的数据求和 最后存入excel中,有没有例子啊 解决方案 解决方案二: excel本身支持csv 所以你可以还是保持csv文件

java-【求助】怎么用Java读txt文件,根据其中的条件,输出一个csv文件?(具体情况见内容)

问题描述 [求助]怎么用Java读txt文件,根据其中的条件,输出一个csv文件?(具体情况见内容) 用Java, 读txt文件(根据Eclipse软件的下方的console改成的log.txt) -------------------------------------- 例: [2013-08-26 10:45:45,042] ERROR does not exist. [2013-08-26 14:43:09,145] ERROR Certification failed. [2013-0

Csv文件转Tab文件的代码

function split(str,splitor) if(splitor==nil) then splitor="," end local strArray={} local strStart=1 local splitorLen = string.len(splitor) local index=string.find(str,splitor,strStart,true) if(index==nil) then strArray[1]=str return strArray en

php导入csv文件碰到乱码问题的解决方法

 这篇文章主要介绍了php导入csv文件碰到乱码问题的解决方法,需要的朋友可以参考下 今天主要是想写一个php导入csv文件的方法,其实网上一搜一大把.都是可以实现怎么去导入的.但是我导入的时候遇到了两个问题,一个是在windows上写代码的时候测试发生了乱码问题,然后解决了.第二个是提交到linux系统上的时候又发生了乱码.我开始还不清楚是乱码的原因,一开始我还以为是代码svn提交发生的错误,到最后我在我的一个群里提问了一下,一朋友是做phpcms的,他说他遇到从Windows提交到Linux