java读取文件批量插入记录
只是一个例子,方便以后查阅。
import ey.db.oracle.OracleHelper; import ey.db.type.*; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; import java.io.FileInputStream; import java.io.FileOutputStream; //import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.net.URLDecoder; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.PreparedStatement; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import java.util.regex.Pattern; import java.util.regex.Matcher; import oracle.jdbc.OracleTypes; public class ImpCNetData { static Configuration conf=new Configuration("/ProjectConfig.properties"); static String db_host=conf.getValue("cdma_host"); static String db_user=conf.getValue("cdma_user"); static String db_passwd=conf.getValue("cdma_passwd"); static String impFilePath=conf.getValue("ImpFilePath"); static String impFileLog=conf.getValue("ImpFileLog"); static String lastKeepString=conf.getValue("LastKeepString"); static String lastFilterString=conf.getValue("LastFilterString"); static String connStr=""; static Pattern lastFilterRex=null; static Pattern lastKeepRex=null; private final String oracleDriverName = "oracle.jdbc.driver.OracleDriver"; //批量插入数据 public void InsertDataBatch(List<CNetData> cnds) throws Exception { Connection conn=null; try { Class.forName(oracleDriverName); conn = DriverManager.getConnection(db_host, db_user, db_passwd); conn.setAutoCommit(false); String sql = "insert into cn_visit(visitid, mobile, url, visittime, onlinetime, desip, desport, mobileip, mobileport,urltypeid, comefrom, bsid, username,housecityid) VALUES(seq_cn_visitid.Nextval,?,?,?,?,?,?,?,?,?,?,?,?,?)"; PreparedStatement prest = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); for(int x = 0; x < cnds.size(); x++){ CNetData cnd=cnds.get(x); prest.setString(1, cnd.getMobile()); prest.setString(2, cnd.getUrl()); prest.setString(3, cnd.getVisitTime()); prest.setString(4, cnd.getOnlineTime()); prest.setString(5,cnd.getDesIp()); prest.setInt(6,cnd.getDesPort()); prest.setString(7,cnd.getMobileIp()); prest.setInt(8,cnd.getMobilePort()); prest.setInt(9,cnd.getFileUrlId()); prest.setInt(10,cnd.getComeFrom()); prest.setString(11,cnd.getBsid()); prest.setString(12,cnd.getUsername()); prest.setInt(13,cnd.getHouseCityId()); prest.addBatch(); } prest.executeBatch(); conn.commit(); conn.close(); } catch (SQLException ex) { ex.printStackTrace(); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch(Exception ex) { ex.printStackTrace(); } finally { if (conn!=null && !conn.isClosed()) conn.close(); } } //读取网址类型 public DataTable GetUrlType() { try { OracleConnection conn= new OracleConnection(db_host+";"+db_user+";"+db_passwd); String cmd="FX114V01_CN_VISIT.GetUrlList"; Parameter pds=new Parameter("out_data",OracleTypes.CURSOR,null, ParameterDirection.OUT); Parameter pcode=new Parameter("out_code",OracleTypes.INTEGER,null, ParameterDirection.OUT); DataSet ds=OracleHelper.ExecuteDataSet(conn,CommandType.StoreProcedure, cmd, pds,pcode); DataTable dt=ds.Tables[0]; return dt; } catch(Exception ex) { ex.printStackTrace(); } return null; } //导入数据 public void ImpData() throws Exception { //StringBuffer sb=new StringBuffer(); String tempstr=null; String url=""; DataTable dt=GetUrlType();//URL分类表 if(lastFilterString.length()>0 && lastFilterRex==null) lastFilterRex=Pattern.compile(lastFilterString); if(lastKeepString.length()>0 && lastKeepRex==null) lastKeepRex=Pattern.compile(lastKeepString); try { //网址类型不能为空 if(dt!=null) { //String path="/usr/hadoop/bigdata/filterurl/part/"; File dir=new File(impFilePath); File[] files=null; if(dir.isDirectory()) files=dir.listFiles(new MyFileFilter()); for(int i=0;i<files.length;i++) { //System.out.println(files[i].getName()); List<CNetData> cnds=new ArrayList<CNetData>(); FileInputStream fis=new FileInputStream(files[i]); BufferedReader br=new BufferedReader(new InputStreamReader(fis,"UTF-8")); //文件逐行读取 while((tempstr=br.readLine())!=null) { try { StringTokenizer itr=new StringTokenizer(tempstr,"|"); if(itr.hasMoreTokens() && itr.countTokens()==11) { CNetData cnd=new CNetData(); String mobile=itr.nextToken().trim(); if(mobile.length()>11) cnd.setMobile(mobile.substring(0,11)); else cnd.setMobile(mobile); url=itr.nextToken().trim(); //替换URL特殊编码 if(url.indexOf("%2F")>=0 || url.indexOf("%3F")>=0) { url = url.replaceAll("%2F","/"); url = url.replaceAll("%3A",":"); url = url.replaceAll("%20"," "); url = url.replaceAll("%3F","?"); url = url.replaceAll("%3D","="); } //保留需要的 if(lastKeepString.length()>0 && lastKeepRex!=null) { Matcher lastKeepMatcher=null; //防止引用或者搜索过来的 if(url.length()<=30) lastKeepMatcher=lastKeepRex.matcher(url); else lastKeepMatcher=lastKeepRex.matcher(url.substring(0,30)); //没找到的话跳出本次循环 if(!lastKeepMatcher.find()) continue; //跳出本次循环 } //过滤不需要的 if(lastFilterString.length()>0 && lastFilterRex!=null) { Matcher lastMatcher=lastFilterRex.matcher(url); //找到需要过滤掉的字符串 if(lastMatcher.find()) continue; //跳出本次循环 } cnd.setUrl(url); cnd.setVisitTime(itr.nextToken()); cnd.setMobileIp(itr.nextToken()); cnd.setDesIp(itr.nextToken()); cnd.setMobilePort(Integer.parseInt(itr.nextToken().trim())); cnd.setDesPort(Integer.parseInt(itr.nextToken().trim())); cnd.setOnlineTime(itr.nextToken()); cnd.setBsid(itr.nextToken()); cnd.setUsername(itr.nextToken()); cnd.setComeFrom(Integer.parseInt(itr.nextToken().trim())); cnd.setFileUrlId(0);//默认值 //查找所属URL类型 for(int k=0;k<dt.Rows.length;k++) { if(url.indexOf(dt.Rows[k].Columns[1].colValue.toString())>=0) { cnd.setFileUrlId(Integer.parseInt(dt.Rows[k].Columns[0].colValue.toString().trim())); break; } } //判断房源或者链接的城市 /* 21 北京 51 东莞 52 珠海 55 佛山 56 广州 59 惠州 68 深圳 162 武汉 174 长沙 341 上海 * */ if(url.indexOf("sz.")>=0||url.indexOf("sz/")>=0) cnd.setHouseCityId(68); else if(url.indexOf("gz.")>=0||url.indexOf("gz/")>=0||url.indexOf("gz_")>=0) cnd.setHouseCityId(56); else if(url.indexOf("dg.")>=0||url.indexOf("dg/")>=0||url.indexOf("dg_")>=0) cnd.setHouseCityId(51); else if(url.indexOf("fs.")>=0||url.indexOf("fs/")>=0||url.indexOf("fs_")>=0) cnd.setHouseCityId(55); else if(url.indexOf("zh.")>=0||url.indexOf("zh/")>=0||url.indexOf("zh_")>=0) cnd.setHouseCityId(52); else if(url.indexOf("hz.")>=0||url.indexOf("hz/")>=0||url.indexOf("hz_")>=0) cnd.setHouseCityId(59); else if(url.indexOf("zs.")>=0||url.indexOf("zs/")>=0||url.indexOf("zs_")>=0) cnd.setHouseCityId(73); else if(url.indexOf("bj.")>=0||url.indexOf("bj/")>=0||url.indexOf("bj_")>=0) cnd.setHouseCityId(21); else if(url.indexOf("sh.")>=0||url.indexOf("sh/")>=0||url.indexOf("sh_")>=0) cnd.setHouseCityId(341); else if(url.indexOf("cs.")>=0||url.indexOf("cs/")>=0||url.indexOf("cs_")>=0) cnd.setHouseCityId(174); else if(url.indexOf("wh.")>=0||url.indexOf("wh/")>=0||url.indexOf("wh_")>=0) cnd.setHouseCityId(162); else cnd.setHouseCityId(0); //上面的方式没找到的情况下才用下面的模式查找 if(cnd.getHouseCityId()<=0) { if(url.contains("sz")||url.contains("shenzhen")) cnd.setHouseCityId(68); else if(url.contains("guangzhou")) cnd.setHouseCityId(56); else if(url.contains("dg")||url.contains("dongguan")) cnd.setHouseCityId(51); else if(url.contains("fs")||url.contains("foshan")) cnd.setHouseCityId(55); else if(url.contains("zhuhai")) cnd.setHouseCityId(52); else if(url.contains("hz")||url.contains("huizhou")) cnd.setHouseCityId(59); else if(url.indexOf("zs")>=0||url.indexOf("zhongshan")>=0) cnd.setHouseCityId(73); else if(url.indexOf("bj")>=0||url.indexOf("beijing")>=0) cnd.setHouseCityId(21); else if(url.indexOf("shanghai")>=0) cnd.setHouseCityId(341); else if(url.indexOf("cs")>=0||url.indexOf("changsha")>=0) cnd.setHouseCityId(174); else if(url.indexOf("wh")>=0||url.indexOf("wuhan")>=0) cnd.setHouseCityId(162); else cnd.setHouseCityId(0); } cnds.add(cnd); } } catch(Exception ex) { ex.printStackTrace(); } } //System.out.println(cnds.size()); //插入数据 if(cnds.size()>0) { InsertDataBatch(cnds); writeLog(files[i].getName()+" " +cnds.size()); files[i].delete(); } br.close(); fis.close(); //break; } } } catch(IOException ex) { System.out.println(ex.getStackTrace()); } } public static void writeLog(String str) { try { //String path="/usr/hadoop/bigdata/filterurl/importfile.log"; File file=new File(impFileLog); if(!file.exists()) file.createNewFile(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); FileOutputStream out=new FileOutputStream(file,true); //如果追加方式用true StringBuffer sb=new StringBuffer(); //sb.append("-----------"+sdf.format(new Date())+"------------\n"); sb.append(sdf.format(new Date())+" "+str+"\n"); out.write(sb.toString().getBytes("utf-8"));//注意需要转换对应的字符集 out.close(); } catch(IOException ex) { System.out.println(ex.getStackTrace()); } } public static void main(String[] args) throws Exception { try { ImpCNetData icd=new ImpCNetData(); icd.ImpData(); } catch(Exception ex) { ex.printStackTrace(); } } }
记录类:
public class CNetData { private String mobile; public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getVisitTime() { return visitTime; } public void setVisitTime(String visitTime) { this.visitTime = visitTime; } public String getOnlineTime() { return onlineTime; } public void setOnlineTime(String onlineTime) { this.onlineTime = onlineTime; } public String getDesIp() { return desIp; } public void setDesIp(String desIp) { this.desIp = desIp; } public int getDesPort() { return desPort; } public void setDesPort(int desPort) { this.desPort = desPort; } public String getMobileIp() { return mobileIp; } public void setMobileIp(String mobileIp) { this.mobileIp = mobileIp; } public int getMobilePort() { return mobilePort; } public void setMobilePort(int mobilePort) { this.mobilePort = mobilePort; } public int getComeFrom() { return comeFrom; } public void setComeFrom(int comeFrom) { this.comeFrom = comeFrom; } public String getBsid() { return bsid; } public void setBsid(String bsid) { this.bsid = bsid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } private String url; private String visitTime; private String onlineTime; private String desIp; private int desPort; private String mobileIp; private int mobilePort; private int comeFrom; private String bsid; private String username; private int fileUrlId; private int houseCityId; public int getHouseCityId() { return houseCityId; } public void setHouseCityId(int houseCityId) { this.houseCityId = houseCityId; } public int getFileUrlId() { return fileUrlId; } public void setFileUrlId(int fileUrlId) { this.fileUrlId = fileUrlId; } }
获取配置文件类:
import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 读取properties文件 * */ public class Configuration { private Properties propertie; private InputStream in; /** *//** * 初始化Configuration类 */ public Configuration() { propertie = new Properties(); } /** *//** * 初始化Configuration类 * @param filePath 要读取的配置文件的路径+名称 */ public Configuration(String filePath) { propertie = new Properties(); try{ in =Object.class.getResourceAsStream(filePath); propertie.load(in); in.close(); } catch (FileNotFoundException ex){ System.out.println("读取属性文件--->失败!- 原因:文件路径错误或者文件不存在"); ex.printStackTrace(); } catch (IOException ex){ System.out.println("装载文件--->失败!"); ex.printStackTrace(); } }//end ReadConfigInfo(...) /** *//** * 重载函数,得到key的值 * @param key 取得其值的键 * @return key的值 */ public String getValue(String key) { if(propertie.containsKey(key)){ String value = propertie.getProperty(key);//得到某一属性的值 return value; } else return ""; }//end getValue(...) /** *//** * 重载函数,得到key的值 * @param fileName properties文件的路径+文件名 * @param key 取得其值的键 * @return key的值 */ public String getValue(String fileName, String key) { try{ String value = ""; in = Object.class.getResourceAsStream(fileName); propertie.load(in); in.close(); if(propertie.containsKey(key)){ value = propertie.getProperty(key); return value; }else return value; } catch (FileNotFoundException e){ e.printStackTrace(); return ""; } catch (IOException e){ e.printStackTrace(); return ""; } catch (Exception ex){ ex.printStackTrace(); return ""; } }//end getValue(...) }