CSV文件的生成与分析

写好这些类之后,就可以开始着手测试了。
写一个测试CSV文件生成的jsp文件。如:

<%@ page contentType="text/html" import="com.vogoal.util.*,com.vogoal.util.csv.*,java.io.IOException" %>
create a csv file
<%
try {
CSVCreater csvCre = new CSVCreater("C:\\test.csv");
csvCre.setConvertFlag(true);
csvCre.setData("aaa");
csvCre.setData("aa,a");
csvCre.writeLine();
csvCre.setData("aa\"a");
csvCre.setData("aa,a");
csvCre.setData("aa,a");
csvCre.writeLine();
csvCre.setData("aa\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.writeLine();
csvCre.close();
} catch (IOException e) {
e.printStackTrace();
}
%>

写一个测试CSV文件分析的jsp文件。如:

<%@ page contentType="text/html" import="com.vogoal.util.*,com.vogoal.util.csv.*,java.io.IOException,
java.util.ArrayList" %>
analysis a csv file<br>
<%
try {
CSVAnalysis csvAna = new CSVAnalysis("C:\\test.csv");
csvAna.setConvertFlag(true);
ArrayList al = csvAna.analysis();
for (int i = 0; i < al.size(); i++) {
out.println( (i + 1) + " line start<br>");
ArrayList al1 = (ArrayList) al.get(i);
for (int j = 0; j < al1.size(); j++) {
out.println(al1.get(j));
out.println("<br>");
}
out.println( (i + 1) + " line end<br>");
}
csvAna.close();
} catch (IOException e) {
e.printStackTrace();
}
%>

将编译后的class拷贝到TOMCAT自己的应用的WEB-INF下。将jsp文件放到自己的应用下。
然后启动TOMCAT,访问jsp文件,当访问creCSV.jsp的时候,正常情况下可以看到C盘根目录下生成了一个test.csv文件。然后访问anaCSV.jsp文件,可以看到分析后的数据被打印出来。

至此,csv生成,分析类做成。

使用帮助:

CSVCreater.java类,用来生成CSV文件的类。
构造函数public CSVCreater(String arg) throws IOException
参数:arg 要生成的csv文件的绝对路径
使用例CSVCreater csvCre = new CSVCreater("C:\\test.csv");

public void setConvertFlag(boolean b)
是否转义设定函数(将半角双引号进行转义处理)
参数:true 需要转义(推荐) false 不转义

public void setData(String data)
添加单个数据的函数

public void writeLine()
结束换行函数

public void writeDataByLine(String[] args)
将一个数组的元素添加到一行并换行函数

public void close() throws IOException
必须调用的函数,写入文件并关闭文件处理的对象。

例子可参考jsp文件中的代码,但是jsp文件中的close()方法是在try块中执行的,不推荐,使用的时候还是在finally块中执行要安全一些。
这个类涉及到了文件的操作,有可能出现IOException,出现异常的时候会抛出给使用者。

CSVAnalysis.java
构造函数 public CSVAnalysis(String f) throws IOException
参数是要分析的文件的绝对路径。

public ArrayList analysis() throws IOException
分析流处理的方法,返回ArrayList对象。返回的ArrayList的数据格式是
ArrayList中存放着ArrayList对象,存放的每个ArrayList对象对应csv文件的一行。
一行对应的ArrayList中存放着String对象,为该行中所有的数据。

public void close() throws IOException
必须调用的函数,关闭文件处理的对象。
同样,这个方法应在finally块中执行要安全一些。

源码下载:CSVproc.zip
源码为上面提到过的所有的类和jsp文件


anaCSV.jsp
<%@ page contentType="text/html" import="com.vogoal.util.*,com.vogoal.util.csv.*,java.io.IOException,java.util.ArrayList" %>
analysis a csv file<br>
<%

try {
CSVAnalysis csvAna = new CSVAnalysis("C:\\test.csv");
csvAna.setConvertFlag(true);
ArrayList al = csvAna.analysis();
for (int i = 0; i < al.size(); i++) {
out.println( (i + 1) + " line start<br>");
ArrayList al1 = (ArrayList) al.get(i);
for (int j = 0; j < al1.size(); j++) {
out.println(al1.get(j));
out.println("<br>");
}
out.println( (i + 1) + " line end<br>");
}
csvAna.close();
} catch (IOException e) {
e.printStackTrace();
}
%>


creCSV.jsp

<%@ page contentType="text/html" import="com.vogoal.util.*,com.vogoal.util.csv.*,java.io.IOException" %>
create a csv file
<%

try {
CSVCreater csvCre = new CSVCreater("C:\\test.csv");
csvCre.setConvertFlag(true);
csvCre.setData("aaa");
csvCre.setData("aa,a");
csvCre.writeLine();
csvCre.setData("aa\"a");
csvCre.setData("aa,a");
csvCre.setData("aa,a");
csvCre.writeLine();
csvCre.setData("aa\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.writeLine();
csvCre.close();
} catch (IOException e) {
e.printStackTrace();
}
%>


package com.vogoal.util;

/**
* @author SinNeR
* http://bbs.blueidea.com
*
* static method
*/
public class UtilCla {
public static String CSVEncode(String in) {
String out = "";
if (in == null)
return out;
out = in.replaceAll("&", "&");
out = out.replaceAll("\"", """);
return out;
}

public static String CSVDecode(String in) {
String out = "";
if (in == null)
return out;
out = in.replaceAll(""", "\"");
out = out.replaceAll("&", "&");
return out;
}
}


package com.vogoal.util.csv;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

import com.vogoal.util.UtilCla;

/**
* @author SinNeR
* http://bbs.blueidea.com
*
* CSVAnalysis
*/
public class CSVAnalysis {
private InputStreamReader fr = null;

private boolean convertFlag = false;

private ArrayList dataContainer = new ArrayList();

public static final String DEL_CHAR = ",";

public static final String AV_CHAR = "\"";

public CSVAnalysis(String f) throws IOException {
fr = new InputStreamReader(new FileInputStream(f));
}

public void setConvertFlag(boolean b) {
convertFlag = b;
}

public ArrayList analysis() throws IOException {

BufferedReader br = new BufferedReader(fr);
String rec = null;
try {
while ((rec = br.readLine()) != null) {
ArrayList alLine = analysisLine(rec);
dataContainer.add(alLine);
}
} catch (IOException e) {
throw e;
} finally {
br.close();
}

return dataContainer;
}

private ArrayList analysisLine(String strLine) {
System.out.println(strLine);
ArrayList al = new ArrayList();
String[] dataArr = strLine.split(AV_CHAR);
for (int i = 1; i < dataArr.length; i = i + 2) {
if (convertFlag)
al.add(UtilCla.CSVDecode(dataArr[i]));
else
al.add(dataArr[i]);
}
return al;
}

public void close() throws IOException {
fr.close();
}

public static void main(String[] args) {
try {
CSVAnalysis csvAna = new CSVAnalysis("C:\\test.csv");
csvAna.setConvertFlag(true);
ArrayList al = csvAna.analysis();
for (int i = 0; i < al.size(); i++) {
ArrayList al1 = (ArrayList) al.get(i);
for (int j = 0; j < al1.size(); j++) {
System.out.println(al1.get(j));
}
}
csvAna.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


package com.vogoal.util.csv;

import java.io.FileOutputStream;
import java.io.IOException;

import com.vogoal.util.UtilCla;

/**
* @author SinNeR
* http://bbs.blueidea.com
*
* CSVCreater
*/
public class CSVCreater {
private FileOutputStream fos = null;

private StringBuffer sb = null;

private boolean convertFlag = false;

public static final String DEL_CHAR = ",";

public static final String AV_CHAR = "\"";

public CSVCreater(String arg) throws IOException {
fos = new FileOutputStream(arg, false);
sb = new StringBuffer();
}

public void setData(String data) {
if (convertFlag)
data = UtilCla.CSVEncode(data);
sb.append(AV_CHAR);
sb.append(data);
sb.append(AV_CHAR);
sb.append(DEL_CHAR);
}

public void setConvertFlag(boolean b) {
convertFlag = b;
}

public void writeLine() {
if (sb.charAt(sb.length() - 1) == ',')
sb.delete(sb.length() - 1, sb.length());
sb.append("\r\n");
}

public void writeDataByLine(String[] args) {
for (int i = 0; i < args.length; i++)
setData(args[i]);
writeLine();
}

public void close() throws IOException {
try {
fos.write(sb.toString().getBytes());
} catch (IOException e) {
throw e;
} finally {
fos.close();
}
}

public static void main(String[] args) {
try {
CSVCreater csvCre = new CSVCreater("C:\\test.csv");
csvCre.setConvertFlag(true);
csvCre.setData("aaa");
csvCre.setData("aa,a");
csvCre.writeLine();
csvCre.setData("aa\"a");
csvCre.setData("aa,a");
csvCre.setData("aa,a");
csvCre.writeLine();
csvCre.setData("aa\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.setData("aa,\"a");
csvCre.writeLine();
csvCre.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


package com.vogoal.test;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

/**
* @author SinNeR
*
* analysis a CSV file
*/
public class HelloCSVAnalysis {
public static void main(String[] args) {
InputStreamReader fr = null;
BufferedReader br = null;
try {
fr = new InputStreamReader(new FileInputStream(
"C:\\helloCsv.csv"));
br = new BufferedReader(fr);

String rec = null;
String[] argsArr = null;
while ((rec = br.readLine()) != null) {
System.out.println(rec);
argsArr = rec.split(",");
for (int i = 0; i < argsArr.length; i++) {
System.out.println("num " + (i + 1) + ":" + argsArr[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try{
if ( fr != null )
fr.close();
if ( br != null )
br.close();
}catch(IOException ex){
ex.printStackTrace();
}
}
}
}


package com.vogoal.test;

import java.io.FileWriter;
import java.io.IOException;

/**
* @author SinNeR
*
* create a CSV file
*/
public class HelloCsvCreater {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("C:\\helloCsv.csv");
fw.write("aaa,bbb,ccc,ddd,eee,fff,ggg,hhh\r\n");
fw.write("aa1,bb1,cc1,dd1,ee1,ff1,gg1,hh1\r\n");
fw.write("aaa\r\n");
fw.write("aa2,bb2,cc2,dd2,ee2,ff2,gg2,hh2\r\n");
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值