Java文件读取,写入数据库

/**  * 文件读写及数据入库工具包  */ package com.xxx.file; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; /**  * @author QZ_ba  * 文件读取类  */ public class ReadFile3 { //建立数据库链接 static Connection con = null; //建立预编译语句对象 static Statement pstmt = null; //建立一个结果集 static ResultSet result = null; /** * 初始化数据库链接驱动 */ private void initJdbc(){ try { Class.forName("oracle.jdbc.driver.OracleDriver"); //加载驱动程序 String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";              //数据库链接信息 String user = "admin1001"; //数据库用户名 String pass = "admin1001"; //数据库密码 con = DriverManager.getConnection(url, user, pass); //获取链接 } catch (Exception e) { e.printStackTrace(); } } /** * 文件读取操做 * @param fileName 文件名(全路径名称) * @throws IOException  */ private void readFile(String fileName) throws IOException{ BufferedReader in = new BufferedReader(new FileReader(fileName)); //阅读器    String line; //行数据    String tbName = null; //标签名--数据库表名    String[] cols = null; //标签列名--数据库列名    String[] vals = null; //标签列值--数据库列值    List<String> inserList = new ArrayList<String>(); //插入语句集合    List<String> tbList = new ArrayList<String>();                   //表名集合    List<String[]> colSz = new ArrayList<String[]>(); //列名数组集合    PrintWriter out = new PrintWriter(new FileWriter("F:/test/insert.txt"));//    try {    while(null!=(line = in.readLine())){     if(line.startsWith("<") && !line.startsWith("<!") && !line.startsWith("</")){//解析表名--以"<"开头,且不以"<!"和"</"开头     tbName = line.substring(line.indexOf("<") + 1, line.indexOf(":"));//从"<"开始截取到第一个":"     tbList.add(tbName);     }else if(line.startsWith("@")){//解析列名     cols = line.replaceAll("@", "").split("\\s{2,}|\t");//替换掉开头"@",按多空格或Tab键分组截取,得到列名数组     colSz.add(cols);     }else if(line.startsWith("#")){//解析数据     vals = line.split("\\s{2,}|\t");//按多空格或Tab键分组截取,得到数据数组     String ists = null;         //插入数据SQL ists = "INSERT INTO " + tbName + "_TEST("; for (int i = 0; i < cols.length; i++) { ists += cols[i] + ","; } ists = ists.substring(0, ists.length() - 1); ists += ") VALUES("; String val = ""; for (int i = 1; i < vals.length; i++) { if(!"NULL".equals(vals[i])){ val = vals[i]; } ists += "'" + val + "',"; val = ""; } ists = ists.substring(0, ists.length() - 1); ists += ")"; inserList.add(ists);     }else{//此处出现列值中有换行的现象,须要作特殊处理     //若无插入语句,跳出当前循环,继续执行下次循环     if(null == inserList || inserList.size() == 0) continue;     if(line.startsWith("//")) continue;     /* 将出现换行的行按多空格或制表符进行分割 并将其数组值插入上一行插入语句的valus后 */     String[] hxStr = line.split("\\s{2,}|\t");     String insertStr = inserList.get(inserList.size() - 1).replace(")", "");//获取上一行插入语句,并将结尾处的)替换为空     for (int i = 0; i < hxStr.length; i++) {     insertStr += ",'" + hxStr[i] + "'";//追加换行数据切割后的每个值 }     insertStr += ")";//将values最后追加),插入语句完整      inserList.remove(inserList.size() - 1);//删除上一行插入语句     inserList.add(insertStr);              //将新的插入语句插入到list中     }    }    for (String str : inserList) {     out.write(str + ";"); out.println(); }    out.flush();    System.out.println("数据插入语句写完毕!");         createTables(tbList,colSz); insertData(inserList); } catch (Exception e) { e.printStackTrace(); }finally{ try { if(null != out) out.close(); } catch (Exception e2) { e2.printStackTrace(); } } } /** * 建表操做 * @param createList */ private void createTables(List<String> tbName,List<String[]> col) { try { pstmt = con.createStatement(); int tlen = tbName.size();   //表个数 int clen = 0;               //列个数 String[] cols = {};         //列名数组 String createSql = ""; String tname = ""; List<String> clist = new ArrayList<String>(); PrintWriter out = new PrintWriter(new FileWriter("F:/test/create.txt")); for (int i = 0; i < tlen; i++) { tname = tbName.get(i); cols = col.get(i); clen = cols.length; createSql = "CREATE TABLE "+tname+"_TEST("; for (int j = 0; j < clen; j++) { createSql +=  cols[j] + " VARCHAR2(1000),"; } createSql = createSql.substring(0, createSql.length() - 1) + ")"; out.write(createSql); out.println(); clist.add(createSql); pstmt.addBatch(createSql); } out.flush(); pstmt.executeBatch(); try { if (null != out) { out.close(); } } catch (Exception e2) { e2.printStackTrace(); } System.out.println("建表完毕!"); } catch (Exception e) { e.printStackTrace(); }finally{ } } /** * 数据入库操做 * @throws ClassNotFoundException  * @throws SQLException  */ private void insertData(List<String> inserList) throws ClassNotFoundException{ try{ pstmt = con.createStatement(); System.out.println("数据条数:" + inserList.size()); for (String string : inserList) { pstmt.addBatch(string); } pstmt.executeBatch(); }catch (Exception e) { e.printStackTrace(); }finally{ } } /** * @param args */ public static void main(String[] args) { ReadFile3 rd = new ReadFile3(); try { rd.initJdbc(); long begin = System.currentTimeMillis(); System.out.println("数据插入准备!开始时间为:" + begin); rd.readFile("F:/123.CIME"); long end = System.currentTimeMillis(); System.out.println("数据插入完毕!结束时间为:" + end); try { if(null != pstmt){ pstmt.close(); } if(null != con){ con.close(); } } catch (Exception e2) { } long mills = (end - begin) / 1000 / 60 ; System.out.println("耗时约:" + mills + "分钟!"); } catch (Exception e) { e.printStackTrace(); } } }