CSV 文件解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: <p>介绍</p> <p>    在很多时候,数据是以CSV文件格式存放的。在提取CSV数据时,我们借助javacsv这个开源工具来处理,还是比较方便。</p> <p><br></p> <p>javacsv in pom.xml of Maven<br></p> <p></p> <pre code_snippet_id="387236" snippet_file_name="bl

介绍

    在很多时候,数据是以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;
	}
}


相关文章
|
5月前
|
分布式计算 Java 大数据
MaxCompute产品使用合集之大数据计算MaxCompute外部表映射了oss中的csv文件,看到"\N"被解析为"N",是什么原因
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
简单的csv文件解析
csv文件的结构很简单,最基本的规则,就是用逗号分隔每一个单元格,用换行( 或者 )分隔每一列。其中需要注意的就是双引号为特殊的转义字符。详细的csv文件格式定义,在rfc4180中,主要的定义为: file = [header CRLF] record *(CRLF record) [CRLF]
3838 0
|
2月前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
2月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
56 6
|
17天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理
|
21天前
|
开发工具
Flutter-AnimatedWidget组件源码解析
Flutter-AnimatedWidget组件源码解析
|
17天前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
172 37
|
9天前
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
53 12

热门文章

最新文章

推荐镜像

更多