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("&", "&amp;");
out = out.replaceAll("\"", "&quot;");
return out;
}
public static String CSVDecode(String in) {
String out = "";
if (in == null)
return out;
out = in.replaceAll("&quot;", "\"");
out = out.replaceAll("&amp;", "&");
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));
else
al.add(dataArr);
}
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);
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);
}
}
} 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();
}
}
}
页:
[1]