Java处理csv文件

Java处理csv文件
5人收藏此文章, 我要收藏 发表于9个月前(2012-08-09 20:34) , 已有433次阅读 ,共0个评论
背景:

做数据订正的时候,需要对查询出的一批数据进行批量的复杂操作,存储过程需要审批嫌麻烦,这里采用一个main函数将 csv 中的数据进行 sql 拼接。

第一步:下载Java操作 CSV 的类库,http://ostermiller.org/utils/download.html

第二步:配置log4j,输出sql到日志文件

01
log4j.rootLogger=CONSOLE,FILE
02
log4j.addivity.org.apache=true
03

04
# 应用于控制台
05
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
06
log4j.appender.CONSOLE.Threshold=INFO
07
log4j.appender.CONSOLE.Target=System.out
08
log4j.appender.CONSOLE.Encoding=GBK
09
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
10
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
11

12
#应用于文件
13
log4j.appender.FILE=org.apache.log4j.FileAppender
14
log4j.appender.FILE.File=C:/sqlresult.log
15
log4j.appender.FILE.Append=false
16
log4j.appender.FILE.Encoding=GBK
17
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout


第三步:MainCVS程序

01
package coffee;
02

03
import java.io.FileInputStream;
04
import java.io.IOException;
05

06
import org.apache.log4j.Logger;
07

08
import com.Ostermiller.util.ExcelCSVParser;
09
import com.Ostermiller.util.LabeledCSVParser;
10

11
/**
12
* 通过cvs文件生成SQL文件
13
*
14
* @author lee.ll 2012-8-9 下午2:19:41
15
*/
16
public class MainCSV {
17

18
private static Logger log = Logger.getLogger(MainCSV.class.getName());
19

20
// csv解析器,对于第一行的表头信息,自动加载为索引关键字
21
private LabeledCSVParser csvParser;
22
// 文件所读到行数
23
private int currLineNum = -1;
24
// 用来存放当前行的数据
25
private String[] currLine = null;
26

27
// 构造函数
28
protected MainCSV(String filePath) throws IOException{
29
csvParser = new LabeledCSVParser(new ExcelCSVParser(new FileInputStream(filePath)));
30
currLineNum = csvParser.getLastLineNumber();
31
}
32

33
// 检查是否还有数据 return ture 还有一行数据,false 没有数据
34
public boolean hasMore() throws IOException {
35
currLine = csvParser.getLine();
36
currLineNum = csvParser.getLastLineNumber();
37
if (null == currLine) return false;
38
return true;
39
}
40

41
// 返回当前行数据,关键字所指向的数据 param:String filedName 该行的表头 return:String 返回当前行数据,关键字所指向的数据
42
public String getByFieldName(String fieldName) {
43
return csvParser.getValueByLabel(fieldName);
44
}
45

46
// 关闭解析器
47
public void close() throws IOException {
48
csvParser.close();
49
}
50

51
// 读取当前行数据 return String[] 读取当前行数据
52
public String[] readLine() throws IOException {
53
currLine = csvParser.getLine();
54
currLineNum = csvParser.getLastLineNumber();
55
return currLine;
56
}
57

58
public int getCurrLineNum() {
59
return currLineNum;
60
}
61

62
public static void main(String[] args) {
63
try {
64
// 实例解析器CsvFileParser
65
MainCSV parser = new MainCSV("C:\\sqlresult.csv");
66

67
// 读取数据
68
while (parser.hasMore()) {
69
String updateSql = "update table set column1" + parser.getByFieldName("column1") + "), column2"
70
+ parser.getByFieldName("column2") + ";";
71

72
log.info(updateSql);
73
}
74

75
parser.close();
76

77
System.out.println("处理完毕!");
78
} catch (Exception e) {
79
System.out.println("处理失败!!!");
80
}
81
}
82

83
}
我这里是将拼接好的 sql 输出到日志 C:/sqlresult.log

你可能感兴趣的:(J2EE)