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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值