`
还有也许
  • 浏览: 169199 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

文件上传自动分割信息入库文件读取

    博客分类:
  • java
阅读更多

最近做了一个功能,由于每逢年过节,要求导入客户资料的客户越来越多。现在客户资料超过了800万,查询速度明显下降,甚至无法忍受。既然有些客户只是为了给这些导入的客户发送短信,而不运用其他功能,那就直接给你手机号码的了。

首先要选择给哪个商户导入他提供的手机号码:

 

  页面:

<%@ page contentType="text/html; charset=utf-8"%>
<html>
<head>
<% 
   String departmentSid=String.valueOf(request.getAttribute("departmentSid")); 
   int corpSid=(Integer)request.getAttribute("corpSid");
    
    session.setAttribute("corpSid",corpSid);
    session.setAttribute("departmentSid",departmentSid);
    session.setAttribute("pageContext",pageContext);
    
%>
<script type="text/javascript">
//得到文件路径的js方法,目前没有用到此方法
function getValueIE8(){
    var ip = document.getElementById("filename");
    ip.select();
    alert(document.selection.createRange().text);
    document.getElementById("fileNamePath").value=document.selection.createRange().text;
}
</script>
</2Ftr>

<tr><td><input type="submit" name="btnSubmit"  value=" 上 传 " class="DefaultButton"/></td></tr>
</table>
</form>
%6ȷ手机号码--选择txt文件</caption>
<tr><td><font class="FieldItem">选择txt文件<font class="NotNull">(*必填项)&nbsp;&nbsp;必须上传txt文件,而且每个手机号码占一行,大小不要超过50M</font></font><br/>

<input type="file" name="filename" id="filename" _dataType="string"></td><td></td>
</tr>

<tr><td><input type="submit" name="btnSubmit"  value=" 上 传 " class="DefaultButton"/></td></tr>
</table>
</form>
</body>
</html>
 

 方法:

public ModelAndView selectTxt(HttpServletRequest request
			,HttpServletResponse response) {
    	//String departmentSid =request.getParameter("departmentSid");
    	String departmentSid = StringUtils.varFormat(request.getParameter("departmentSid"));
		Department department=departmentDao.getById(departmentSid);
		
        if(departmentSid == null)
        {
            request.setAttribute("message", MSG_NO_DATA_FOUND);
            return new ModelAndView(failView);
        } else
        {
        	Company company=department.getCompany();
            request.setAttribute("corpSid", company.getCorpSid());
            request.setAttribute("departmentSid", departmentSid);
            return new ModelAndView(viewPage);
        }
	}

 接着是上传文件:

  public ModelAndView uploadTxt(HttpServletRequest request

			,HttpServletResponse response) {
		//PageContext pageContext=null;
		String departmentSid=String.valueOf(request.getSession().getAttribute("departmentSid"));
		
		int corpSid=(Integer)request.getSession().getAttribute("corpSid");
		String account="";
		Company company =companyDao.getById(corpSid);
		Department department =departmentDao.getById(departmentSid);
		if(null==company){
			request.setAttribute("message", MSG_NO_DATA_FOUND);
            return new ModelAndView(failView);
		}else{
			 account=company.getCorpAccount();
		}
		
		//System.out.println("departmentSid="+departmentSid+",corpSid="+corpSid);
		//String departmentSid="";
		//int corpSid=0;
		
		String  fileName = "";
		//String  departmentSid = "";
		//Mysql 连接初始化
    	
		try {
		FileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        fileUpload.setSizeMax(50*1024*1024);
        
			List fildItems = fileUpload.parseRequest(request);
			Iterator fildItem = fildItems.iterator();
			int count=0;
		     FileItem fi;
		        while(fildItem.hasNext())
		        {
		        	   
		                fi = (FileItem)fildItem.next();
		                //String name=fi.getFieldName();
			            //普通表单域
			            if(fi.isFormField())
			            {
			            	
			            }
			            //文件表单
			            else if(!fi.isFormField()) 
						{
			            	String fileExcel = (new StringBuilder(String.valueOf(request.getSession().getServletContext().getRealPath("/")))).append("phoneTxt/").append(account+"/").toString();
			            	File  uploadDir = new File(fileExcel);
			            	System.out.println("文件夹名称:"+uploadDir.getName());
			            	long size=uploadDir.length();
			            	//System.out.println("文件大小:"+size);
			                if(!(uploadDir.exists()))
			                {
			                	uploadDir.mkdir();//创建目录!
			                }
			            	String filePath = fi.getName();//获得文件绝对路径
			            	System.out.println("文件名称:"+filePath);
			            	 int a=filePath.lastIndexOf("\\");
			            	 System.out.println("a="+a);
			            	 int b=filePath.lastIndexOf(".");
				             String fn=filePath.substring(b);//获取文件的后缀名
				             if(!fn.equals(".txt")){
				            	 request.setAttribute("message", "上传的文件格式不正确,请上传txt文件!");
				     			return new ModelAndView(this.failView);
				             }
				             
				             System.out.println("filePath="+filePath+",fn="+fn);
				             String f=DateUtils.getDate("yyyyMMddHHmmss");//以日期命名
			            	try {
								fi.write(new File((new StringBuilder(fileExcel)).append(f+fn).toString()));
								fileName=fileExcel+f+fn;//获得文件的相对路径
			            		
								String trueName=filePath.substring(a+1,b);
								System.out.println("取代后缀名的txt:"+trueName);
								boolean istrue=splitFile(10000,fileName,fileExcel,trueName,company,department);
								if(!istrue){
									request.setAttribute("message", "在分割文件或插入数据库记录时出错!");
									return new ModelAndView(this.failView);
								}
							} catch (Exception e) {
								e.printStackTrace();
								return new ModelAndView(this.failView);
							}
						}
	        		count++;
	        
	        	} 
			            	
		} catch (FileUploadException e) {
			// TODO Auto-generated catch block
			//e.printStackTrace();
			request.setAttribute("message", "文件上传过大,请选择小于50M的文件!");
			return new ModelAndView(this.failView);
		}
		request.setAttribute("message",this.MSG_SUCCESS);
		request.setAttribute("redirectUrl", requestUri+".do?method=list");
		return new ModelAndView(this.successView);
	}
 

在上传的过程中按行分割上传的文件:

   private boolean splitFile(int rows,String sourceFilePath,String targetDirectoryPath,String fileName,Company company,Department department){

    	  File sourceFile = new File(sourceFilePath);
    	  File targetFile = new File(targetDirectoryPath);
    	  boolean isContinue=true;
    	  //获得文件名称
    	  String trueName=fileName;
    	  //获得公司,部门
    	 
    	  int s=0;
    	  if(!sourceFile.exists()||rows<=0||sourceFile.isDirectory()){
    	   System.out.println("源文件不存在或者输入了错误的行数");
    	   return isContinue;
    	  }
    	  if(targetFile.exists()){
    	   if(!targetFile.isDirectory()){
    	    System.out.println("目标文件夹错误,不是一个文件夹");
    	    return isContinue;
    	   }
    	  }else{
    	   targetFile.mkdirs();
    	  }
    	
    	  try{
    	   BufferedReader br = new BufferedReader(new FileReader(sourceFile));
    	   BufferedWriter bw = null;
    	   String str = "";
    	   String tempData = br.readLine();
    	   int i=1;
    	   int count=0;
    	   while(tempData!=null){
    	    str += tempData+"\r\n";
    	    File file=new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName());
    	    if(i%rows==0){
    	          bw = new BufferedWriter(new FileWriter(file));
    	          bw.write(str);
    	          bw.close();
    	          str = "";
    	          s += 1;
    	          count++;
    	    }
    	    i++;
    	    tempData = br.readLine();
    	   }
    	   System.out.println("共循环"+count+",i="+i);
    	   if((i-1)%rows!=0){
    	    File file=new File(targetFile.getAbsolutePath()+"/"+s+"_"+sourceFile.getName());
    	    
    	    bw = new BufferedWriter(new FileWriter(file));
    	    bw.write(str);
    	    bw.close();
    	    br.close();
    	    s += 1;
    	   }
    	   System.out.println("文件分割结束,共分割成了"+s+"个文件");
    	  }catch(Exception e){
    		  e.printStackTrace();
    	  }
    	  boolean isTrue=insertData(trueName,sourceFile.getName(),targetFile.getAbsolutePath(),company,department,s);
    	  if(!isTrue){
    		  isContinue=false;
    	  }
    	  return isContinue;
    }
0
0
分享到:
评论

相关推荐

    java读取TXT文件入库

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

    java按行读取大文件并解析入库

    在Java编程中,处理大容量文本文件是一项挑战,因为传统的逐行读取方式可能会消耗大量内存,导致程序崩溃。为了高效地处理这类问题,我们可以利用Java的`java.nio`包中的BufferedReader和FileChannel等类,实现按行...

    文件上传及入库案例

    本案例“文件上传及入库”聚焦于如何使用SSM(Spring、SpringMVC和MyBatis)框架来实现文件上传,并将文件信息存储到数据库中。下面将详细介绍这一过程的关键知识点。 首先,`SSM`是Java Web开发中的主流框架组合,...

    java 读取Ftp指定位置的文件解析并入库

    标题 "java 读取Ftp指定位置的文件解析并入库" 涉及到的是使用Java编程语言通过FTP(File Transfer Protocol)协议从远程服务器上下载文件,然后对下载的文件进行解析,并将解析得到的数据存储到数据库中。...

    java上传excel并且解析入库

    总结起来,Java实现“上传Excel并解析入库”涉及的关键技术包括文件上传(如Spring MVC的MultipartFile)、Excel解析(如Apache POI)以及数据库操作(JDBC或ORM)。通过熟练掌握这些技术,你可以构建出高效、稳定的...

    java中读取shp文件数据存入数据库

    shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形,每一个都有他们各自的属性。 shape文件由ESRI开发,一个...

    读取文件数据入库与读取表数据生成文件

    读取文件入库,两种方式 资源中内容包括两种功能:1.把数据库的数据,通过sql查询生成txt文件,存放到指定路径;(CreateFileToPathMain类,java调用shell脚本方式) 2.读取指定路径下的文件数据,插入到指定表中。...

    数据文件上传和整理入库

    演示操作使用MMD管理平台、CRD报表设计器和DPS管理平台,对数据文件进行上传、后台进行数据提取、整理,将数据结构化并存入数据库。

    自动寻迹自动入库小车

    随着科技的进步和智能化技术的发展,自动寻迹自动入库小车项目应运而生,为初学者提供了一个绝佳的学习平台。这个项目不仅集成了电子工程、嵌入式系统、机械工程和自动化控制等多个领域的知识,还能够激发学习者对于...

    定时读取SQL文件执行入库程序

    因数据库同步太耗网络资源,同步数据不多可采取产生SQL同步的方式,这个小程序,可以定时读取指定SQL文件连接数据库并执行的功能,配合ftp下载或推送就可实现同步。 采用ADO方式连接,config.ini文件可设置连接字符...

    asp上传excel并读取入库

    综上所述,"asp上传excel并读取入库"涉及了文件上传、Excel数据读取、数据预处理、数据库操作以及错误处理等多个知识点。通过掌握这些技能,开发者可以构建出强大的数据导入系统,有效提升数据管理的效率。

    ASP读取本地Excel、Word文件转成html入库

    3. **读取Excel文件**:使用ADO(ActiveX Data Objects)的Recordset对象,可以连接到Excel文件并读取数据。首先,创建一个ADODB.Connection对象连接到Excel文件,然后打开一个ADODB.Recordset对象来获取数据。数据...

    blob 文件入库例子

    `FetchDir.java`可能是一个用于读取本地文件目录,获取待上传至数据库的Blob文件的工具类。此类通常会包含方法,如`listFiles()`,遍历指定目录下的所有文件,准备进行数据库操作。 `BlobClobExample.java`则可能是...

    Steam的st文件密钥

    用户通过这些文件可以进行游戏的入库操作,但通常这个过程是由Steam客户端自动处理的。 入库操作是将游戏添加到用户的Steam库中的过程,通常是购买游戏后自动完成的。然而,有时用户可能会遇到入库问题,这时手动...

    读取execl文件,并写入 Oracle

    本教程将详述如何使用Delphi编程语言结合Excel文件来读取特定列的信息,并将其高效地写入Oracle数据库。首先,我们需要理解Delphi、Excel文件处理以及Oracle数据库的基本概念。 Delphi是一种基于Object Pascal的...

    读取图片文件入库

    使用java实现了读取一个文件夹并将文件中的图片读取到数据库中存储,这是一个简单的示例代码。

    日志文件解析后用jdbc入库的代码,见博客描述

    logs中就是为我们日常记录的日志文件,你要对起进行分析记录入表。 这些日志文件名都是有一定规则每小时生成一个。拿附件中的文件来说access_log.2009-04-30.17.log 表示2009年4月30日17时的数据。 记录到数据里对应...

    读取和写入ini配置文件_读写ini_

    2. 读取节和键值对:利用LabVIEW的“读取文本文件”VI,读取文件内容。然后,通过字符串操作(如分割字符串)来解析出节名和键值对。 3. 存储数据:将读取的键值对存储到适当的变量或数据结构中,如簇或数组。 写入...

    钢筋材料入库明细账(自动计算表)

    这个名为“钢筋材料入库明细账(自动计算表)”的文件,显然是一款专为建筑工程行业设计的电子表格,它利用了Microsoft Excel的功能来简化钢筋材料的库存管理。 Excel是一款强大的电子表格软件,能够进行数据组织、...

Global site tag (gtag.js) - Google Analytics