txt文件下传数据 批量解析批量存入数据库方法操作(1)
txt文件上传数据 批量解析批量存入数据库方法操作(1)
/** *常用方法 * 去掉数组中每一个元素的开头和结尾的引号 * @param recArray 要处理的数组 * @return 处理后的数组 */ public static String[] minusQuotation(String[] recArray) { for (int i = 0; i < recArray.length; i++) { String str = recArray[i]; if (null!=str) { if(str.indexOf( "\"")==0) str = str.substring(1,str.length());//去掉开头的分号 if(str.lastIndexOf("\"")==(str.length()-1)) str = str.substring(0,str.length()-1); //去掉最后的分号 } recArray[i] = str; } return recArray; } //按引号截取 public static String[] parseRecord(String record) { String[] recArray = record.split(",(?=\")|(?<=\"),");//按引号截取 //String[] recArray2 = record. return recArray; } //按斜杠截取 public static String[] subRecord(String subrString){ String[] subArray=subrString.split("/");//按斜杠截取 return subArray; } //按逗号截取 public static String[] ssubRcord(String sstr){ String[] ssubArray=sstr.split(",");//按逗号截取 return ssubArray; }
/** * * 文件解析中批量解析方法 (批量提交txt文件信息解析) * * */ public static String ResolveFileContent(String filepath) { try { BufferedReader br = null; // new BufferedReader(new FileReader(filepath)); InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(filepath)),"GB2312"); br = new BufferedReader(reader); //基元素: "sms,deliver,"10657502022321","","","2011.07.28 11:04","","彭元彬,朱宇英/CA1509北京首都机场-杭州萧山机场2011-07-31 07:55/起飞/总票款1420.0元/保险费0.0元/票号999-2155782847999-2155782848/请持有效身份证件到机场办理手续,如有疑问请致电4008100999-8[中国国航]" String s,str; //每条数据 ArrayList<String[]> recList=new ArrayList<String[]>(); //存储所有解析后的集合 while((s = br.readLine())!=null){ //System.out.println("数据记录为:"+s); System.out.println("000====================================================================="); if (s.indexOf("/")>0) { //把航变信息排除 (不含"/") String aString=s.replace("/", "\",\""); //将每行内涵有的 (/) 转为(",") System.out.println("ee"+aString); String[] recArray = parseRecord(aString); // 按”""“ 截取 if (recArray.length>=1) { //该条记录长度 for (int i = 0; i < recArray.length; i++) { System.out.println("||||||||||||||||||"+recArray[i]); } String[] mosStrings=minusQuotation(recArray); //去掉引号 for (int i = 0; i < mosStrings.length; i++) { System.out.println("-----------------"+mosStrings[i]); } if (mosStrings[6].split(",").length>0) { //mosStrings[6]乘客姓名在该行记录里面存在一个以上的 int begin = 0; int end = 14; for (int i = 0; i < mosStrings[6].split(",").length; i++) { String ph=mosStrings[11].substring(2); //截取票号数组串 while(end<=ph.length()) { //判断票号长度截取对应票号值 //数组strings 接收每条数据进行处理存储 String[] strings={mosStrings[0],mosStrings[1],mosStrings[2],mosStrings[3],mosStrings[4],mosStrings[5],mosStrings[6].split(",")[i++],mosStrings[7],mosStrings[8],mosStrings[9].substring(3,mosStrings[9].length()-1),mosStrings[10].substring(3,mosStrings[10].length()-1),mosStrings[11].substring(2).substring(begin,end),mosStrings[12]}; begin += 14; //票号增值 end += 14; for (int j = 0; j < strings.length; j++) { // System.out.println("要存入数据的数组:"+j+":"+strings[j]+"==and=="+strings[j].length()); } recList.add(strings); //将每条经过处理的数组 添加到集合 System.out.println("===================================================================="); } } } } boolean bl=iflightInfoService.addFlightInfoList(recList); if (bl) { return "1"; } } } } catch (Exception e) { e.printStackTrace(); return "0"; } return "1"; }
/** * 上传文件 解析 主体Action方法 * */ public ActionForward flightInfoUpload(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //得到上传文件的集合 用的map 方便以后升级一次上传多个文件进行解析 System.out.println("====="); FlightInfoActionForms fileActionForm = (FlightInfoActionForms) form; System.out.println("fileActionForm.getFile1()="+fileActionForm.getFile1()); Map<String, FormFile> map=form.getMultipartRequestHandler().getFileElements(); System.out.println("map:"+map.size()+"-----map file:"+map.get("f1")); //得到所有键 Set<String> file=map.keySet(); for (String key : file) { FormFile formFile=map.get(key); //通过key 遍历到所有对应的值(文件路径) if (formFile!=null && formFile.toString().length()>0) { //存在 String fileName=formFile.getFileName(); //得文件名 byte[] fileContent=formFile.getFileData(); //得文件内容 String realPath=request.getSession().getServletContext().getRealPath("/upload");//路径虚转实 FileOutputStream fileOutputStream=new FileOutputStream(realPath+"/"+fileName);//输出流 写文件 fileOutputStream.write(fileContent); //数据写入 fileOutputStream.close(); String resolvingPath=realPath+"/"+fileName; System.out.println("path:"+resolvingPath); if (resolvingPath!=null || resolvingPath.length()>0) { //有文件上传 String tre="tre"; request.setAttribute("tre", tre); //开始解析文件 ResolveFileContent(resolvingPath); //解析方法 } } } return new ActionForward("/flight_info.jsp"); }
/** * 批量添加航班信息 dao * */ public boolean addFlightInfoList(ArrayList<String[]> aList) { // TODO Auto-generated method stub boolean flag=true; //session开启 Session session=null; //事物开启 Transaction transaction=null; try { session=HibernateSessionFactory.getSession(); transaction=session.beginTransaction(); for (int i = 0; i < aList.size(); i++) { //循环遍历所有集合中的数组 System.out.println("aList.size()>>>>>>>>>>>>>>"+aList.size()); String[] arrayFlight=aList.get(i); for (int j = 0; j < arrayFlight.length; j++) { System.out.println(arrayFlight[6]); } System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"); //将集合中的值遍历存储在每个数组中 TbFlightInfo flightInfo=new TbFlightInfo(); for (int j = 0; j < arrayFlight.length; j++) { //循环每个数组 取值 flightInfo.setDefault1(null); flightInfo.setDefault2(null); flightInfo.setDefault3(null); flightInfo.setDefault4(null); flightInfo.setDefault5(null); flightInfo.setFlightNo("CA1624"); flightInfo.setGuideTime(null); Float float1=Float.parseFloat(arrayFlight[9].toString()); Float float2=Float.parseFloat(arrayFlight[10].toString()); flightInfo.setInsurance(float2); flightInfo.setTicketAll(float1); flightInfo.setLeaveAddress(arrayFlight[7].toString()); flightInfo.setTicketNo(arrayFlight[7].toString()); flightInfo.setPassenger(arrayFlight[6].toString()); flightInfo.setSauaCost(null); flightInfo.setTakeOffTime(null); session.save(flightInfo); } // 判断 数据量到达该数据量时候刷新数据清空缓存 再次加快存储数据速度 if ((i+1)%100==0) { session.flush(); session.clear(); } } transaction.commit(); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); flag=false; } return flag; }