核心思想:
1.找到要读取的文件。
2.通过文件流按行读取,因为一行是一条记录,按照文件的分割字符方式进行拆分数组。
3.遍历文本的行,每一行存数组。遍历数组,数据库字段对应数组下标进行插入。
代码示例
public class ShjkTest {
public static void main(String[] args) {
File file = new File("F:\\test.txt");//源文件地址
Connection conn = DataSourceUtils.getConnection();
BufferedReader reader = null;
String tempString = null;
try {
int i=0;
conn.setAutoCommit(false);
InputStreamReader read = new InputStreamReader(new FileInputStream(file),"gbk"); //避免中文乱码,gbk或者utf-8切换
reader = new BufferedReader(read);
while ((tempString = reader.readLine()) != null) {//按行读取
i=i+1;
String transno = "20190904"+get10Random();//id随即生成
tempString = transno+"|"+tempString;//两张表id统一
String sql = getSql(tempString);
String sql1 = getSql2(tempString);
SqlInsert.insert(conn,sql);
SqlInsert.insert(conn,sql1);
if(i>100){
conn.commit();
i=0;
}
}
conn.commit();
} catch (Exception e) {
e.printStackTrace();
FileLog.systemLog(file+ "解析异常");
}finally {
DataSourceUtils.closeConnection(conn);
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
e1.printStackTrace();
FileLog.systemLog("reader close Error!");
}
}
}
}
/**
* 入库USERINFO表
* @param params
* @return
*/
public static String getSql(String params){
StringBuffer sb = new StringBuffer();
String [] temp = params.split("\\|"); // |字符需要转义
String VICECARDFLAGS = temp[13].equals('是')?"1":"0";//三元表达式
String birth = temp[18].substring(6, 14);
if(temp.length ==21){
sb.append(" insert into SHJK_USERINFO t"
+ "(t.TRANSNO,t.USERNAME,t.USERIDCODE,t.USERBIRTH,t.USERADDRESS,t.VICECARDFLAG,t.PRODFINISHDATE,"
+ "t.CELLPHONE,t.HALLNO,t.HALLADDRESS,t.inserttime)");
sb.append(" values('"+temp[0]+"','"+temp[16]+"','"+temp[18]+"','"+birth+"','"+temp[19]+
"','"+VICECARDFLAGS+"','"+temp[12]+"','"+temp[20]+"','"+temp[15]+"','"+temp[14]+"',sysdate) ");
}
return sb.toString();
}
/**
* 入库OFFERINFO表
* @param params
* @return
*/
public static String getSql2(String params){
StringBuffer sb = new StringBuffer();
String [] temp = params.split("\\|");
if(temp.length ==21){
sb.append(" insert into SHJK_OFFERINFO t(t.TRANSNO,t.OFFERINSTID,t.OFFERID,t.OFFERNAME,t.EFFDATE,"
+ "t.EXPDATE,t.STATUSCD,t.INSERTTIME)");
sb.append(" values('"+temp[0]+"','"+temp[1]+"','"+temp[9]+"','"+temp[8]+"','"+temp[10]+"','"+temp[11]+"','"
+"1000"+"',sysdate) ");
}
return sb.toString();
}
/**
* 获取10位随机数
*
*/
public static String get10Random(){
Random rd = new Random();
String str = rd.nextInt(1000000000)+"";
str = ("000000000000".substring(0, (10 - str.length())))+str ;
return str;
}
}