`
marshaldong
  • 浏览: 13141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

用JAVA读取CSV文件格式,存入List 中,其每个元素为一个String[]

阅读更多
package dong.csv;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class CSVParser {
	private File file;
	private List<String[]> resultList = new ArrayList<String[]>();
	private static Pattern pattern = Pattern
			.compile(",?\"([^\"]*(\"{2}[^\"]*\"{2}[^\"]*)*)\",?");

	public static void main(String[] args) {
		CSVParser parser = new CSVParser("test.csv");
		List<String[]> list = parser.parse();
		print(list);
	}

	public CSVParser(File file) {
		this.file = file;
	}

	public CSVParser(String filePath) {
		file = new File(filePath);
	}

	private static void print(List<String[]> list) {
		for (int i = 0; i < list.size(); i++)
			System.out.println(Arrays.toString(list.get(i)) + " Length: "
					+ list.get(i).length);
	}

	public List<String[]> parse() {
		try {
			BufferedReader br = getReader();
			String line = "";
			while ((line = br.readLine()) != null) {
				line = handleSpecial(line);
				String[] elements = line.split(",");
				revert(elements);
				store(elements);
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return resultList;
	}

	/**
	 * Revert to original ',' if contains '|', precondition is that each
	 * original Field of the line doesn't contain this char
	 * 
	 * @param elements
	 */
	private void revert(String[] elements) {
		for (int i = 0; i < elements.length; i++)
			elements[i] = elements[i].replace("|", ",");
	}

	private void store(String[] elements) {
		resultList.add(elements);
	}

	private BufferedReader getReader() {
		BufferedReader br = null;
		try {
			//br = new BufferedReader(new InputStreamReader(new FileInputStream(
				//	file), Charset.forName("GB18030")));// ISO-8859-1,GB18030
			br = new BufferedReader(new FileReader(file));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return br;
	}

	/**
	 * Handling special characters for each given line.
	 * 
	 * @param inputLine
	 * @return
	 */
	private String handleSpecial(String inputLine) {
		if (inputLine == null || inputLine.trim().length() == 0)
			return "";
		Matcher m = getMatcher(inputLine);
		String after = "";
		while (m.find()) {
			after = m.group(2);
			String before = after;
			System.out.println("Before: " + before);
			if (after.indexOf(",") > -1)
				// use '|' to replace ',' for later splitting of each field of
				// the line,this '|' needs to be revert to ',' after the whole line being
				// split
				after = after.replace(',', '|');
			if (after.indexOf("\"\"") > -1)
				after = after.replace("\"\"", "\"");
			System.out.println("After:" + after);
			inputLine = inputLine.replace(before, after);
		}

		return inputLine;
	}

	private static Matcher getMatcher(String sequence) {
		return pattern.matcher(sequence);
	}

}

1
0
分享到:
评论
1 楼 economist 2012-08-16  

相关推荐

    java 读取csv 并转为Map<String,Object>

    通过引用【opevcsv】依赖,逐行读取数据 并转为Map&lt;String,Object&gt;格式,后续可以通过BeanUtil.MaptoBean()方法将map转为你需要的bean对象; csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将...

    java读写csv文件,中文乱码问题

    在Java编程中,CSV(Comma Separated Values)文件是一种常用的格式,用于存储表格数据,如电子表格或数据库。在处理CSV文件时,尤其是涉及中文字符时,可能会遇到乱码问题。这个问题通常与字符编码设置有关。下面...

    读取csv文件中指定行列的数据

    本教程将深入探讨如何使用Java在Eclipse集成开发环境中读取CSV文件中的指定行和列数据。 首先,我们需要了解CSV文件的基本结构。CSV文件是以逗号分隔的文本文件,每行代表一个记录,每个记录的字段由逗号分隔。例如...

    读取Excel格式CSV格式文件

    例如,可以创建一个CSVReader对象,然后使用它逐行读取文件,每行的数据会被解析成数组。 下面是一段使用JExcelApi读取.xls文件的示例代码: ```java import jxl.*; public class ReadExcel { public static ...

    java读取csv文件并将读取的数据写入新生成的csv文件

    在我们需求中需要读取一个csv文件的数据,但是只有旧的csv的几列数据再新写入一个csv文件,而且在旧的数据有空的数据,需要判断旧的csv的空值。可能写的存在不完善!但是应用的需求里面还是能用的

    java 解析csv文件例子,csv文件 中文乱码问题

    在Java编程中,CSV(Comma Separated Values)文件是一种常见的数据存储格式,它以逗号分隔每一列的数据,方便数据交换和处理。当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇...

    读取创建CSV文件并自动解析文件编码方式

    在IT行业中,CSV(Comma Separated Values)文件是一种广泛使用的数据交换格式,因其简单、通用而备受青睐。本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言...

    java 读取csv文件

    CSV文件是以逗号分隔的纯文本文件,每一行代表一个记录,每个记录内的字段由逗号分隔。某些情况下,如果字段包含逗号,该字段可能被引号包围。例如: ``` "Name","Age","City" "John Doe",30,"New York" "Jane ...

    java操作CSV文件

    为了高效地读取CSV文件,本文提供了一个名为`ReadCSV`的类,该类封装了读取功能,并提供了对文件的操作接口。 ```java import java.io.FileReader; import java.io.IOException; import java.util.Arrays; import ...

    C#文件流读取CSV文件

    总结来说,C#中的文件流读取CSV文件主要涉及`FileStream`、`StreamReader`和`TextReader`的使用。对于更复杂的Excel操作,可以借助第三方库,如EPPlus或NPOI。在处理Excel数据时,了解如何正确解析和操作CSV格式的...

    java中读取shp文件数据存入数据库

    shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形,每一个都有他们各自的属性。 shape文件由ESRI开发,一个...

    java对csv文件进行读写操作

    每行数据被解析为一个字符串数组,每个数组元素代表CSV文件中的一列。 **3. CSV写入操作** 写入CSV文件则使用`CSVWriter`类。以下是一个写入CSV文件的例子: ```java import com.opencsv.CSVWriter; public ...

    C语言读取CSV文件

    总之,C语言读取CSV文件的核心是理解文件格式,使用文件操作函数打开和读取,以及运用字符串处理技术进行字段解析。通过封装这些功能,可以创建可重用的接口,简化代码并提高效率。对于更复杂的需求,可以研究现有的...

    Java避免UTF-8的csv文件打开中文出现乱码的方法

    在上面的代码中,我们使用join()方法将字符串数组连接成一个字符串,并使用getBytes()方法将其转换为字节数组。最后,使用BufferedOutputStream将字节数组写入到文件中。 需要注意的是,Excel 2007以下版本不支持...

    c++读取csv文件

    在Visual Studio 2013中,你可以创建一个新的C++控制台项目,将上述代码粘贴到`main.cpp`文件中,并替换`yourfile.csv`为你的CSV文件路径,然后编译运行。这样,你就能成功地读取和处理CSV文件了。对于更复杂的CSV...

    js读取csv文件并使用json显示出来

    在上述的文档内容中,通过一个具体的实现案例,说明了如何读取CSV文件,并将其内容以JSON的形式展示在网页上。关键点包括: 1. 页面布局:使用HTML创建了一个表格结构,其中包括表头(thead)和表体(tbody)。表头...

    java导出csv文件并压缩(含下载提示功能)

    通过以上步骤,你已经实现了在Java中导出CSV文件,然后将其压缩成ZIP格式,并提供了一个Web接口供用户下载。确保正确配置你的服务器和文件路径,以适应实际项目的需求。同时,不要忘记处理可能出现的异常,以确保...

    MFC 读取csv文件

    CSV文件由一系列行组成,每行包含一个或多个字段,字段之间用逗号分隔。例如: ``` Name,Age,Job Alice,25,Engineer Bob,30,Doctor Charlie,28,Lawyer ``` 在MFC中,我们通常使用`CFile`类来打开和读取文件,然后...

    java 读取写入csv

    本文将深入探讨如何使用Java进行CSV文件的操作,基于提供的代码片段,我们将详细解析其工作原理,并扩展相关的知识点。 #### 一、Java读取CSV文件 Java读取CSV文件主要依赖于第三方库,如Apache Commons CSV或...

    C#读取CSV和EXCLE的代码

    CSV(Comma Separated Values,逗号分隔值)是一种常用的文本文件格式,主要用于存储表格数据。使用C#读取CSV文件可以使用OleDbConnection类和OleDbDataAdapter类。 首先,我们需要指定CSV文件的路径和文件名,然后...

Global site tag (gtag.js) - Google Analytics