`
yzz9i
  • 浏览: 221168 次
  • 性别: Icon_minigender_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;
	}

分享到:
评论

相关推荐

    文件上传并解析Excel读取到数据库

    在IT行业中,文件上传并解析Excel以将数据存入数据库是一项常见的需求,特别是在数据分析、报表管理和数据导入导出等场景。本项目利用了Java技术栈中的Hibernate、SpringMVC和Spring框架来实现这一功能,下面将详细...

    C#读取XML文件并写入数据库

    当我们需要将XML文件中的数据存入数据库时,有多种策略可以实现。下面,我们将详细介绍三种使用C#读取XML文件并将其写入数据库的方法。 1. **使用XmlReader类逐行读取并写入** - `XmlReader` 是一个高效的流式读取...

    C# sql实现批量导入数据到数据库

    在IT行业中,数据库操作是日常任务之一,尤其是在处理大量数据时,批量导入数据能显著提高工作效率。本主题聚焦于使用C#语言与SQL技术来实现批量导入数据到数据库的三种方法:普通方法、SqlBulkCopy和使用表值参数...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    在Java编程环境中,解析XML文件是一项常见的任务,特别是在数据处理和集成中。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于存储和传输数据。本教程将介绍如何使用Java解析XML文件,并将解析...

    解析wthrcdn.etouch的xml格式天气存入mysql数据库

    - 为了批量插入,我们可以先将数据保存在Python列表中,然后使用` executemany()`方法一次性插入多行数据。 5. **性能优化**: - 考虑到天气数据可能频繁更新,可以设置定时任务定期抓取和更新数据库,例如使用`...

    POI解析excel并存入mysqlのdemo

    在读取 Excel 数据后,通常需要进行一些预处理,例如格式转换、空值处理、异常值检查等,以确保数据适合存入数据库。 5. **连接 MySQL 数据库**: 使用 JDBC(Java Database Connectivity)驱动,可以建立与 ...

    java读取TXT文件入库

    在Java编程中,读取TXT文件并将其内容存入数据库是一项常见的任务,特别是在数据处理、日志分析或者导入批量数据的场景下。以下是一个详细的知识点解析,涵盖了如何使用Java来实现这一操作。 1. **读取TXT文件** -...

    java实现读取word文件并且上传到数据库

    这一过程涉及到多个技术点,包括文件I/O、Word文档解析、数据库操作以及可能的数据转换。 首先,为了读取Word文件,我们需要使用Java的一个库,如Apache POI。Apache POI是一个流行的开源项目,提供了API来处理...

    Java 实现从Excel批量导入数据到MySQL

    然而,当需要将Excel中的数据存入数据库,例如MySQL时,手动操作会变得低效且易出错。Java作为一种强大的编程语言,提供了多种方式来实现Excel与MySQL之间的数据交互。本文将详细介绍如何利用Java实现从Excel批量...

    java把文本文件内容导入到数据库

    在这个场景下,"java把文本文件内容导入到数据库"是一个典型的应用,它涉及到文本解析、数据库连接以及数据持久化等关键知识点。 首先,我们需要理解文本文件的格式。描述中提到文件内容的字段由“,”分隔,这种...

    Delphi 如何将二维数组数据 以Blob 存入数据库中 并读取 工程

    在本场景中,我们将探讨如何在 Delphi 中将二维数组数据转换为 Blob 数据,然后存入 MySQL 数据库,并从数据库中读取出来。 首先,我们需要了解 Delphi 中的二维数组和 Stream 对象的概念。二维数组是多个一维数组...

    从文本批量读取数据到MySQL数据库并把名字也添加进去

    在批量导入数据前,你需要先将文本文件(如安徽联通.txt)中的数据进行预处理,通常涉及分隔符解析、去除无关字符等操作。假设数据是以逗号分隔的CSV格式,你可以使用Python的pandas库来读取和清洗数据。 ```...

    从Excel中读取数据导入到数据库中

    4. **数据导入**:使用`to_sql()`方法将pandas DataFrame批量写入数据库,或者使用SQL语句逐条插入。 5. **关闭连接**:导入完成后,记得关闭数据库连接以释放资源。 在实际项目中,还应考虑错误处理、性能优化(如...

    将xls中的数据写入数据库

    总结来说,将xls中的数据写入数据库涉及文件读取、数据预处理、数据库连接、SQL语句构造和执行等多个环节,需要对编程语言、数据处理以及数据库操作有深入的理解。通过合理地运用各种工具和技术,可以有效地完成这项...

    C#实现modbus tcp客户端,并将读取的数据存入SQL Server

    在本文中,我们将深入探讨如何使用C#编程语言实现一个Modbus TCP客户端,并将通过网络通信获取的数据存储到SQL Server数据库中。首先,我们需要理解Modbus TCP协议的基础知识,然后了解C#中的网络编程和数据库操作。...

    使用kettle将文本文件导入到数据库

    一个简单的例子,使用kettle将文本文件导入到数据库

    C#写的将csv文件导入至sql数据库,带存储过程的实例

    这个实例提供了从CSV到SQL数据库的数据迁移方案,对于需要频繁进行此类操作的开发者来说,掌握这种方法可以大大提高工作效率。通过合理利用C#和SQL Server的特性,可以实现高效、可靠的大量数据导入。

    jdom 解析 XML文件 java程序 存入Oracle数据库

    对于含有子节点的复杂的XML文件,可以采用jdom.jar来解析。 上传的文件包括程序,XML文件,jdom包,jdbc包 对于复杂的XML文件,可以采用层层解析,虽然方法不是很简便...并且,把解析好的数据存入oracle批量数据库中。

    使用POI解析excel文件并写入数据库

    在IT行业中,处理大量数据时,Excel文件是一个常见的选择,尤其...这个过程涵盖了文件操作、数据解析、数据库连接和事务管理等多个环节,是数据处理中的常见实践。在实际应用中,可以根据具体需求调整和优化这些步骤。

    SpringBoot使用mybatis批量新增500万数据到mysql数据库Demo

    在本项目中,我们主要探讨的是如何利用SpringBoot集成Mybatis框架进行大数据量(例如500万条)的批量插入操作,并将其高效地存入MySQL数据库。这个Demo旨在提供一个学习实例,帮助开发者理解并优化大数据处理的性能...

Global site tag (gtag.js) - Google Analytics