package com.suning.crawler.util;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
/**
* cvs文件读取
*
* @author xxx
*/
public class CSVParser
{
// 日志记录
private Logger logger = Logger.getLogger(CSVParser.class);
/**
* 文件路径
*/
private String filePath;
/**
* 字符编码
*/
private String encode;
/**
* 数据存储
*/
private Map<Integer, List<String>> info;
/**
* @param filePath
* 需要解析的文件路径
*/
public CSVParser(String filePath)
{
this(filePath, "UTF-8");
}
/**
* @param filePath
* 需要解析的文件路径
* @param encode
* 字符编码
*/
public CSVParser(String filePath, String encode)
{
this.filePath = filePath;
this.encode = encode;
info = new HashMap<Integer, List<String>>();
// 开始解析
parseCsv();
}
/**
* 获取行<code>row<row>中的数据,若该行<code>row<row>中的数据,返回<code>null<code>,否则返回该行中的数据
*
* @param row
* 记录行数
* @return 当行数据
*/
public List<String> readLine(int row)
{
return info.get(row);
}
/**
* 解析文件的核心代码
*
* @return csv文件中的数据
*/
private List<String> parseCsv()
{
List<String> row = null;
BufferedReader reader = null;
try
{
// 读取文件
reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), encode));
String rowInfo = reader.readLine();
// 行记录指针
int rowIndex = 0;
while (null != rowInfo && !"".equals(rowInfo.trim()))
{
row = new ArrayList<String>();
// 分割数据列
for (String cell : rowInfo.split(","))
{
row.add(cell);
}
info.put(rowIndex, row);
rowInfo = reader.readLine();
++rowIndex;
}
}
catch (FileNotFoundException e)
{
logger.error("file can not be found, file path: " + filePath);
}
catch (IOException e)
{
logger.error("I/O operations, file path: " + filePath);
}
finally
{
if (null != reader)
{
try
{
reader.close();
}
catch (IOException e)
{
logger.error("I/O operations, file path: " + filePath);
}
}
}
return row;
}
}
分享到:
相关推荐
在MFC(Microsoft Foundation Classes)环境下,利用Visual Studio 2015进行CSV文件的读写操作,可以方便地处理这类数据。本文将详细介绍如何在VS2015的MFC项目中实现CSV文件的读写功能。 1. **CSV文件结构** CSV...
一、CSV文件读取 1. **标准库iostream** 使用`ifstream`类可以读取CSV文件的每一行。首先打开文件,然后逐行读取,每次遇到逗号就分割出一个字段。例如: ```cpp #include #include #include std::...
在VC++环境中,处理CSV文件可以帮助开发者快速地读取和写入结构化的数据。下面将详细介绍如何使用VC++进行CSV文件的读写操作,并提供相关的编程技巧。 首先,CSV文件的结构非常简单,每一行代表一个记录,每个记录...
本项目提供了一个基于C++的简易CSV文件读写工具,允许开发者高效地处理大型CSV文件,即使在内存有限的情况下。 首先,我们需要理解C++中的文件操作基础。C++标准库提供了`fstream`类来处理文件输入输出。`ifstream`...
本文将深入探讨如何在实际项目中进行CSV文件的读写操作。 首先,读取CSV文件是数据分析的第一步。在Python中,我们通常使用pandas库来处理CSV数据。安装pandas库后,可以使用以下代码读取CSV文件: ```python ...
读取CSV文件通常使用`csv.reader`或`csv.DictReader`,而写入CSV文件则使用`csv.writer`或`csv.DictWriter`。 **读取CSV文件:** 1. `csv.reader`: 这个函数返回一个迭代器,每次迭代返回一行数据,数据为列表形式...
codesys通过文件读取功能块是实现对CSV文件数据的读取, a、通过SysFileOpen指令打开文件; b、通过SysFileGetSizeByHandle获取文件字符序列大小; c、通过SysFileRead读取一次读取字符序列,并按顺序依次存入预先设...
本篇文章将深入探讨如何在C++中实现一个CSV文件读取类,以从CSV文件中获取每一行每一列的内容。 首先,我们需要理解CSV文件的基本结构。CSV文件由一行行的数据组成,每行数据由零个或多个字段构成,字段之间用分隔...
下面我们将详细介绍如何使用MFC来读取CSV文件。 首先,理解CSV文件的基本结构至关重要。CSV文件由一系列行组成,每行包含一个或多个字段,字段之间用逗号分隔。例如: ``` Name,Age,Job Alice,25,Engineer Bob,30,...
解决Java读取CSV文件中文乱码问题的步骤如下: 1. **指定字符编码**:在使用`BufferedReader`或者`FileReader`读取文件时,应明确指定编码。例如,使用`InputStreamReader`构造函数可以传入编码类型,如`new ...
php csv文件读取脚本 读取csv文件,并在网页上显示出来,可以选择排序
本篇文章将详细介绍如何在C语言环境下,利用CH376S芯片在STM32F103RCT6上实现CSV文件的读取和写入。 首先,理解CSV文件格式是基础。CSV是一种通用的数据交换格式,其中数据以逗号分隔,每行代表一条记录,每个字段...
通过这个示例,我们可以了解到如何将服务器上的CSV文件读取到浏览器中,并以表格的形式展示出来。这在数据展示、数据分析等应用场景中非常有用。此外,借助PapaParse这样的库,即使是对前端开发不太熟悉的人也可以...
本篇文章将深入探讨如何使用C++来读取和写入CSV文件,以实现数据的导入和导出功能。 首先,理解CSV文件的基本结构至关重要。CSV文件由行组成,每行包含一个或多个字段,字段之间通过逗号分隔。在某些情况下,如果...
本教程将深入探讨如何使用Java在Eclipse集成开发环境中读取CSV文件中的指定行和列数据。 首先,我们需要了解CSV文件的基本结构。CSV文件是以逗号分隔的文本文件,每行代表一个记录,每个记录的字段由逗号分隔。例如...
本文将详细介绍如何在Wince系统中进行CSV文件的读取和写入操作。 首先,读取CSV文件的基本步骤如下: 1. **打开文件**:使用C++的fstream库或其他编程语言的相应文件操作函数,指定CSV文件的完整路径,以只读模式...
一个非常好用的csv文件操作工具
Java读取excel,Excel是我们平时工作中比较常用的用于存储二维表数据的,JAVA也可以直接对Excel进行操作。
文件中包括读取excel、csv文件,同时可以将读取出的文件内容保存在另外一个excel或csv中。注意excel2003和excel2007调用的jar包也不一样,需要将代码进行修改。2007版的将HSSF改成XSSF,2003相反。csv文件用XSSF