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);
}
}
分享到:
相关推荐
通过引用【opevcsv】依赖,逐行读取数据 并转为Map<String,Object>格式,后续可以通过BeanUtil.MaptoBean()方法将map转为你需要的bean对象; csv文件必须带表头,bean对象命名符合驼峰格式; 通过此方法可以快速的将...
在Java编程中,CSV(Comma Separated Values)文件是一种常用的格式,用于存储表格数据,如电子表格或数据库。在处理CSV文件时,尤其是涉及中文字符时,可能会遇到乱码问题。这个问题通常与字符编码设置有关。下面...
本教程将深入探讨如何使用Java在Eclipse集成开发环境中读取CSV文件中的指定行和列数据。 首先,我们需要了解CSV文件的基本结构。CSV文件是以逗号分隔的文本文件,每行代表一个记录,每个记录的字段由逗号分隔。例如...
例如,可以创建一个CSVReader对象,然后使用它逐行读取文件,每行的数据会被解析成数组。 下面是一段使用JExcelApi读取.xls文件的示例代码: ```java import jxl.*; public class ReadExcel { public static ...
在我们需求中需要读取一个csv文件的数据,但是只有旧的csv的几列数据再新写入一个csv文件,而且在旧的数据有空的数据,需要判断旧的csv的空值。可能写的存在不完善!但是应用的需求里面还是能用的
在Java编程中,CSV(Comma Separated Values)文件是一种常见的数据存储格式,它以逗号分隔每一列的数据,方便数据交换和处理。当处理包含中文字符的CSV文件时,可能会遇到乱码问题,这通常与文件编码设置有关。本篇...
在IT行业中,CSV(Comma Separated Values)文件是一种广泛使用的数据交换格式,因其简单、通用而备受青睐。本文将深入探讨如何读取和创建CSV文件,并特别关注自动解析文件编码方式这一关键环节。我们将使用Java语言...
CSV文件是以逗号分隔的纯文本文件,每一行代表一个记录,每个记录内的字段由逗号分隔。某些情况下,如果字段包含逗号,该字段可能被引号包围。例如: ``` "Name","Age","City" "John Doe",30,"New York" "Jane ...
为了高效地读取CSV文件,本文提供了一个名为`ReadCSV`的类,该类封装了读取功能,并提供了对文件的操作接口。 ```java import java.io.FileReader; import java.io.IOException; import java.util.Arrays; import ...
总结来说,C#中的文件流读取CSV文件主要涉及`FileStream`、`StreamReader`和`TextReader`的使用。对于更复杂的Excel操作,可以借助第三方库,如EPPlus或NPOI。在处理Excel数据时,了解如何正确解析和操作CSV格式的...
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形,每一个都有他们各自的属性。 shape文件由ESRI开发,一个...
每行数据被解析为一个字符串数组,每个数组元素代表CSV文件中的一列。 **3. CSV写入操作** 写入CSV文件则使用`CSVWriter`类。以下是一个写入CSV文件的例子: ```java import com.opencsv.CSVWriter; public ...
总之,C语言读取CSV文件的核心是理解文件格式,使用文件操作函数打开和读取,以及运用字符串处理技术进行字段解析。通过封装这些功能,可以创建可重用的接口,简化代码并提高效率。对于更复杂的需求,可以研究现有的...
在上面的代码中,我们使用join()方法将字符串数组连接成一个字符串,并使用getBytes()方法将其转换为字节数组。最后,使用BufferedOutputStream将字节数组写入到文件中。 需要注意的是,Excel 2007以下版本不支持...
在Visual Studio 2013中,你可以创建一个新的C++控制台项目,将上述代码粘贴到`main.cpp`文件中,并替换`yourfile.csv`为你的CSV文件路径,然后编译运行。这样,你就能成功地读取和处理CSV文件了。对于更复杂的CSV...
在上述的文档内容中,通过一个具体的实现案例,说明了如何读取CSV文件,并将其内容以JSON的形式展示在网页上。关键点包括: 1. 页面布局:使用HTML创建了一个表格结构,其中包括表头(thead)和表体(tbody)。表头...
通过以上步骤,你已经实现了在Java中导出CSV文件,然后将其压缩成ZIP格式,并提供了一个Web接口供用户下载。确保正确配置你的服务器和文件路径,以适应实际项目的需求。同时,不要忘记处理可能出现的异常,以确保...
CSV文件由一系列行组成,每行包含一个或多个字段,字段之间用逗号分隔。例如: ``` Name,Age,Job Alice,25,Engineer Bob,30,Doctor Charlie,28,Lawyer ``` 在MFC中,我们通常使用`CFile`类来打开和读取文件,然后...
本文将深入探讨如何使用Java进行CSV文件的操作,基于提供的代码片段,我们将详细解析其工作原理,并扩展相关的知识点。 #### 一、Java读取CSV文件 Java读取CSV文件主要依赖于第三方库,如Apache Commons CSV或...
CSV(Comma Separated Values,逗号分隔值)是一种常用的文本文件格式,主要用于存储表格数据。使用C#读取CSV文件可以使用OleDbConnection类和OleDbDataAdapter类。 首先,我们需要指定CSV文件的路径和文件名,然后...