csv即用逗号分割的文件,本类实现的结果与Excel打开csv时基本相同
不同的是Excel对于回车也作为一个项目的内容,而在这里是以行为单位进行分割
aa,bb,cc,dd ----->|aa|bb|cc|dd 即分割为aa,bb,cc,dd四个元素
"aa","bb","cc","dd" ----->|aa|bb|cc|dd
"a""a","a""""b" -------->|a"a|a""b
"a"b","c""d"e",f""e ------->|ab"|c"de"|f""e|
//Generated by fason
package fason;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Iterator;
public class CSVParse {
public static ArrayList parseCSV(String lineStr){
ArrayList colList = new ArrayList();
StringBuffer sb = new StringBuffer(lineStr);
int colFlg = 0;
boolean comaFlg = false;
StringBuffer colBuf = new StringBuffer();
while(sb.length()>0){
char c = sb.charAt(0);
if(comaFlg == false){
if(c == ','){
colList.add(colBuf.toString());
colBuf = new StringBuffer();
}else if(c == '\"'){
colFlg = 1;
char tmpc = '\0';
if(sb.length()>1){
tmpc = sb.charAt(1);
}
if(tmpc == '\"'){
colFlg = 2;
sb.deleteCharAt(1);
}
comaFlg = true;
}else{
colFlg = 2;
colBuf.append(c);
comaFlg = true;
}
}else{
if(colFlg == 2 && c == ','){
colList.add(colBuf.toString());
colBuf = new StringBuffer();
comaFlg =false;
}else if(colFlg ==1 && c == '\"'){
char tmpc = '\0';
if(sb.length()>1){
tmpc = sb.charAt(1);
}
if(tmpc == '\"'){
colBuf.append(tmpc);
sb.deleteCharAt(1);
}else{
colFlg = 2;
}
}else{
colBuf.append(c);
}
}
sb.deleteCharAt(0);
}
colList.add(colBuf.toString());
return colList;
}
public static ArrayList parseCSVFile(String filePath){
BufferedReader br;
try{
br = new BufferedReader(new FileReader(filePath));
}catch(Exception e){
System.out.print(e.getMessage());
return null;
}
ArrayList lineList = new ArrayList();
try{
String s;
while((s = br.readLine()) != null){
lineList.add(s);
}
}catch(Exception e){
System.out.print(e.getMessage());
}
ArrayList lineColList = new ArrayList();
Iterator ite = lineList.iterator();
while(ite.hasNext()){
String lineStr = (String)ite.next();
lineColList.add(parseCSV(lineStr));
}
return lineColList;
}
}