最近做了一个功能,由于每逢年过节,要求导入客户资料的客户越来越多。现在客户资料超过了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">(*必填项) 必须上传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;
}
分享到:
相关推荐
java读取TXT文件入库,java读取TXT文件入库,java读取TXT文件入库,
java按行读取大容量文本文件,并按行解析入库。使用java.nio下面的相关方法
SSM文件上传,内有jar包,还有注释,如果有什么不懂可以留言问我
读取文件入库,两种方式 资源中内容包括两种功能:1.把数据库的数据,通过sql查询生成txt文件,存放到指定路径;(CreateFileToPathMain类,java调用shell脚本方式) 2.读取指定路径下的文件数据,插入到指定表中。...
shp文件:地理信息系统,也被称作GIS,它主要的扩展类型是SHAPEFILE (.SHP),一个包含了矢量地理空间数据的流行文件格式,描述了几何形态,点,线和多边形,每一个都有他们各自的属性。 shape文件由ESRI开发,一个...
演示操作使用MMD管理平台、CRD报表设计器和DPS管理平台,对数据文件进行上传、后台进行数据提取、整理,将数据结构化并存入数据库。
因数据库同步太耗网络资源,同步数据不多可采取产生SQL同步的方式,这个小程序,可以定时读取指定SQL文件连接数据库并执行的功能,配合ftp下载或推送就可实现同步。 采用ADO方式连接,config.ini文件可设置连接字符...
jakarta-oro.jar commons-net-1.4.1.jar 博文链接:https://firezhfox.iteye.com/blog/1913128
影视系统全自动采集入库,
上传本地文件到服务器进行解析,通过poi继续操作数据,易懂简单。
使用java实现了读取一个文件夹并将文件中的图片读取到数据库中存储,这是一个简单的示例代码。
logs中就是为我们日常记录的日志文件,你要对起进行分析记录入表。 这些日志文件名都是有一定规则每小时生成一个。拿附件中的文件来说access_log.2009-04-30.17.log 表示2009年4月30日17时的数据。 记录到数据里对应...
这是我制作的一个简易自动入库小车,希望对初学者有点帮助
读取execl文件中指定栏位信息,并写入 Oracle
ASP读取本地Excel、Word文件,并且转成html格式入库。
Java多线程读取大文本文件并批量插入MongoDB的代码,文本文件,csv文件,可以结合POI改造使其支持excel。 适合做大量文本数据或日志文件入库的场景,大文本被拆分成多个线程处理,速度快。 批量插入MongoDB,存在则...
【软件功能】 1、自带全自动资源采集功能 2、自动全自动批量下载功能 3、自带全自动入库功能 4、影片清晰度预览功能 5、视频连载功能 6、自动下载影片简介 7、自动下载影片图片 8、自动影片归类 9、自动重命名影
jsp页面可以批量上传多个excel文件,后台解析入库。并将信息展现在jsp页面表格里,勾选多个数据,可以导出excel文件。很方便,很实用!(每一行数据,就相当于表格里的某张表的一条信息,后期只要改下表结构,数据库...
blob 文件入库 mysql 源代码 例子
oracle 存储过程解析文件 检索入库