COMMA SEPARATED VALUE的缩写,出现在档案总管中的档案类型是「逗号分格」,依计算机原来的设定,如果直接点选该档案,计算机将以EXCEL的模式开启该档案。但建议您千万不要这么做,因为CSV档如果以EXCEL开启,由于计算机档案数据转换的原因,会将其CRC之数值改做科学记号方式储存,而造成档案中的 CRC值发生错误。这也是笔者初出茅庐时所得到的惨痛经验,但如果想一窥CSV档的真实面貌,笔者建议您使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。
开启后的CSV档包含了四或五个字段(部分),由左至右分别记载着:文件名称(XXXX.JPG)、档案大小(以BYTE为单位)、CRC32值(八个英文字母或数字组成)、
档案路径(档案储存的子目录名称)和档案内容描述(一般来说都是明星的英文姓名甚或是专辑名称,也可能空白)。而其中第四栏「档案路径」因为每个人储存整理图档的方式不同,所以本栏通常不存在,而一般有含有「档案路径」这栏的CSV档,又称为ECSV档案 CSV文件,也叫逗号分隔值文件,英文名称COMMA SEPARATED VALUE
具体文件格式
每条记录占一行
以逗号为分隔符
逗号前后的空格会被忽略
字段中包含有逗号,该字段必须用双引号括起来
字段中包含有换行符,该字段必须用双引号括起来
字段前后包含有空格,该字段必须用双引号括起来
字段中的双引号用两个双引号表示
字段中如果有双引号,该字段必须用双引号括起来
第一条记录,可以是字段名
我们经常将Excel格式的文件保存为csv格式以方便上传和修改,可是当数据中包含逗号和双引号的时候Excel会把该字段用双引号括住并把数据中的"改为"",从而给解析带来了困难。我写了以下函数来解析这样的字符串:
testSplitCSV.java:
import java.util.Vector;
class testSplitCSV{
/**
* Split one line of csv file
* @return a String array results
*/
public static String[] splitCSV(String src) throws Exception{
if (src==null || src.equals("")) return new String[0];
StringBuffer st=new StringBuffer();
Vector result=new Vector();
boolean beginWithQuote = false;
for (int i=0;i<src.length();i++){
char ch = src.charAt(i);
if (ch=='\"'){
if (beginWithQuote){
i++;
if (i>=src.length()){
result.addElement(st.toString());
st=new StringBuffer();
beginWithQuote=false;
}else{
ch=src.charAt(i);
if (ch == '\"'){
st.append(ch);
}else if (ch == ','){
result.addElement(st.toString());
st=new StringBuffer();
beginWithQuote = false;
}else{
throw new Exception("Single double-quote char mustn't exist in filed "+(result.size()+1)+" while it is begined with quote\nchar at:"+i);
}
}
}else if (st.length()==0){
beginWithQuote = true;
}else{
throw new Exception("Quote cannot exist in a filed which doesn't begin with quote!\nfield:"+(result.size()+1));
}
}else if (ch==','){
if (beginWithQuote){
st.append(ch);
}else{
result.addElement(st.toString());
st=new StringBuffer();
beginWithQuote = false;
}
}else{
st.append(ch);
}
}
if (st.length()!=0){
if (beginWithQuote){
throw new Exception("last field is begin with but not end with double quote");
}else{
result.addElement(st.toString());
}
}
String rs[] = new String[result.size()];
for (int i=0;i<rs.length;i++){
rs[i]=(String)result.elementAt(i);
}
return rs;
}
public static void main(String[] args){
String src1= "\"fh,zg\",sdf,\"asfs,\",\",dsdf\",\"aadf\"\"\",\"\"\"hdfg\",\"fgh\"\"dgnh\",hgfg'dfh,\"asdfa\"\"\"\"\",\"\"\"\"\"fgjhg\",\"gfhg\"\"\"\"hb\"";
try {
String[] Ret = splitCSV(src1);
for (int i=0;i<Ret.length;i++){
System.out.println(i+": "+Ret[i]);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
}
/**
* 在很多时候我们都需要将一些数据集合以某种文件格式输出,其中CSV文件输出是一种比较常用的方式.
* 下面是一个简单的实现CSV文件输出的代码,与大家共享.
*/
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
import org.apache.struts.actions.DispatchAction;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
public class CsvUtil extends DispatchAction {
public ActionForward exportCsv(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
HttpSession session = request.getSession();
//头部
String data = "姓名,电子邮件地址,移动电话,业务电话,业务传真,职务,部门\n";
//具体的数据,可以动态的从数据库中读取
data += "张三,zhangs@163.com,13800000000,010-88889999,010-99998888,部门领导,产品研发部\n";
data += "李四,lis@163.com,13800000001,010-88889999,010-99998888,业务助理,产品研发部\n";
StringBuilder str = new StringBuilder();
str.append(data);
response.setContentType("text/csv");
response.setCharacterEncoding("gb18030");
response
.setHeader("Content-Disposition",
"attachment; filename=\""
+ new String("通讯薄.csv".getBytes("gb18030"),
"iso8859-1") + "\"");
PrintWriter out = response.getWriter();
out.write(str.toString());
out.flush();
out.close();
return null;
}
}
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import au.com.bytecode.opencsv.CSVReader;
import au.com.bytecode.opencsv.CSVWriter;
import au.com.bytecode.opencsv.bean.ColumnPositionMappingStrategy;
import au.com.bytecode.opencsv.bean.CsvToBean;
public class CsvDemo {
public static void main(String[] args) throws IOException {
final String[] header = new String[]{"name", "sex", "age"};
final String[][] data = new String[][]{header, {"Lucy", "F", "22"}, {"Tom", "M", "25"}, {"Lily", "F", "19"}};
File tempFile = File.createTempFile("csvWriterTest", ".csv");
tempFile.deleteOnExit();
CSVWriter writer = new CSVWriter(new FileWriter(tempFile));
for (int i = 0; i < data.length; i++) {
writer.writeNext(data[i]);
}
writer.close();
CSVReader reader = new CSVReader(new FileReader(tempFile));
String[] line;
String readline = "";
for (int row = 0; (line = reader.readNext()) != null; row++) {
for (int col = 0; col < line.length; col++) {
if (data[row][col] != null) {
System.out.print(line[col] + (col != line.length - 1 ? "," : ""));
readline = readline + line[col] + (col != line.length - 1 ? "," : " ");
}
}
System.out.println("");
}
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(Person.class);
String[] columns = new String[] {"name", "sex", "age"};
strat.setColumnMapping(columns);
CsvToBean csv = new CsvToBean();
List<?> persons = csv.parse(strat, new StringReader(readline));
for (int i = 1; i < persons.size(); i++) {
System.out.println(((Person)persons.get(i)).getName());
System.out.println(((Person)persons.get(i)).getSex());
System.out.println(((Person)persons.get(i)).getAge());
}
reader.close();
}
}
分享到:
相关推荐
本篇文章将深入探讨如何在Java环境中处理这两种格式,特别是如何使用Java来解析VCF文件,并将数据转换为CSV格式。 CSV是一种简单但实用的数据交换格式,它以逗号分隔每个字段,每一行代表一条记录。在Java中处理CSV...
在做项目的时候,发现使用POI无法解析以csv文件结尾的文件,虽然csv文件能用Excel打开,但是csv文件没有像Excel一样有规定的电子表格形式,故使用POI无法解析csv文件,在网上找了一下,发现java有提供java csv文件来...
在Java编程环境中,将Excel文件(.xls或.xlsx格式)转换为CSV文件是一项常见的任务,特别是在数据处理和分析中。本文将深入探讨如何利用Java来完成这个过程,主要使用Apache POI库,这是一个广泛使用的开源库,专门...
在Java编程中,CSV(Comma Separated Values)文件是一种常见的数据存储格式,通常用于数据交换。CSV文件的每一行代表一个记录,记录之间通过换行符分隔,每个字段则由逗号或其他分隔符分隔。在本文中,我们将深入...
在Java编程语言中,处理CSV(逗号分隔值)文件是一项常见的任务,尤其是在数据导入导出、数据分析或数据存储的场景中。本教程将详细讲解如何在Java中读取和写入CSV文件,通过一个实际的例子代码进行演示。首先,我们...
以下将详细讲解如何在Java中处理`xls`、`xlsx`和`csv`格式的文件。 首先,对于`xls`文件,这是Excel 2003及更早版本使用的文件格式,基于HSSF(Horrible Spreadsheet Format)库。Apache POI项目提供了一个强大的...
在Java编程中,读取CSV(Comma Separated Values)文件是一项常见的任务,尤其是在处理数据导入、数据分析或数据存储时。CSV文件因其简洁、通用的格式而被广泛使用。本篇将详细介绍如何在Java中有效地读取CSV文件,...
### Java读取与写入CSV文件的详细解析 在日常的软件开发中,处理CSV(Comma Separated Values)文件是一种常见的需求,特别是在数据分析、数据导入导出等场景下。Java作为一种广泛使用的编程语言,提供了多种方式来...
在Java编程环境中,CSV(Comma Separated Values)文件是一种常见的数据存储格式,用于存储表格数据,如电子表格或数据库。CSV文件以纯文本形式存储,每一行代表一个记录,记录间的字段通过逗号分隔。`javacsv`库是...
在Java中,处理CSV文件通常需要借助第三方库,如本案例中的`javacsv`库,版本2.1。这个库提供了一系列方法来帮助我们方便地解析和生成CSV数据。 `javacsv`库由Jonathan Leffler开发,它允许开发者通过简单的API读取...
Java作为一种强大的编程语言,提供了多种处理CSV文件的方法。在本篇文章中,我们将深入探讨如何在Java中读取、写入以及操作CSV文件,并结合“Path”类来管理文件路径。 首先,让我们理解CSV文件的基本结构。CSV文件...
Java读取CSV例子 Java读取CSV例子是通过使用javacsv-2.0.jar包来实现的。javacsv-2.0.jar包提供了CsvReader和CsvWriter两个类,分别用于读取和写入CSV文件。在本例子中,我们将展示如何使用javacsv-2.0.jar包来...
### Java操作CSV文件知识点 #### 一、简介与背景 在日常的数据处理工作中,CSV(Comma-Separated Values)文件是一种常见的数据交换格式。它简单易用且跨平台兼容性好,常被用于导入导出数据、数据分析等场景。在...
java实现批量excel转csv,其中csv文件为utf-8格式,支持直接导入数据库。
这个名为"java csv共用javacsv.jar.zip"的压缩包,包含了一个名为`javacsv.jar`的库文件,可以被Java项目引用以实现CSV文件的相关功能。 `javacsv`库由`csvreader`和`csvwriter`两个主要部分组成。`CsvReader`类...
标题中的“java 大数据导出csv小工具”指的是一个基于Java编程语言开发的应用程序,其主要功能是将大量数据转换并导出为CSV(逗号分隔值)格式的文件。CSV是一种通用的文件格式,广泛用于数据交换,因为它可以被...
本实例聚焦于“java实现csv导出千万级数据实例”,旨在提供一个高效、稳定的解决方案,避免因数据量过大而导致的性能问题,如Java中的栈溢出(Stack Overflow)。CSV(Comma Separated Values)格式因其简单、通用性...
在Java中,处理CSV文件主要依赖于第三方库,如OpenCSV、Apache Commons CSV或Java 8及以上版本内置的`java.util.CSVPrinter`。在这个程序中,我们可能使用了其中一个库来创建和写入CSV文件。 接下来,我们来探讨...