java读取数据批量文件_java批量读取多个文件并存入数据库

package com.mobile.web.api;

import com.mobile.commons.JsonResp;

import com.mobile.model.LogInfo;

import com.mobile.service.LogInfoService;

import org.apache.commons.lang3.StringUtils;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.transaction.annotation.Transactional;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import java.io.*;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Locale;

@RestController

@RequestMapping(value= "/test")

@Transactionalpublic classImportController {

Logger log= Logger.getLogger(this.getClass());

@AutowiredprivateLogInfoService logInfoService;

@RequestMapping(value= "/importTxt", method =RequestMethod.GET)publicJsonResp importTxt() throws IOException, ParseException {

log.debug("开始导入数据");

String encoding= "GBK";

List logInfoList= newArrayList();

String dir= "E:\\test\\log";

File[] files= newFile(dir).listFiles();for(File file : files){           //循环文件夹中的文件if (file.isFile() && file.exists()) { //判断文件是否存在

importFile(file, encoding, logInfoList); //将文件中的数据读取出来,并存放进集合中

}else{return JsonResp.toFail("文件不存在,请检查文件位置!");

}

}

Boolean insertFlag=logInfoService.insertBatch(logInfoList); //将集合中的数据批量入库if (!insertFlag) {return JsonResp.toFail("保存失败");

}returnJsonResp.ok();

}

/** 读取数据,存入集合中 */public static voidimportFile(File file, String encoding, List logInfoList) throws IOException, ParseException {

InputStreamReader read= null;//考虑到编码格式

try{

read= newInputStreamReader(newFileInputStream(file), encoding);  //输入流

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}catch(FileNotFoundException e) {

e.printStackTrace();

}

BufferedReader bufferedReader= newBufferedReader(read);

String lineTxt= null;

SimpleDateFormat sdf= new SimpleDateFormat("[dd/MMM/yyyy:HH:mm:ss Z]", Locale.US); //时间格式化,此处有坑,下边会说到while ((lineTxt = bufferedReader.readLine()) != null) {  //读取文件内容

String[] lineArr= lineTxt.split(" ");int len =lineArr.length;

LogInfo logInfo= newLogInfo();     //封装实体对象做入库准备

String logDate= lineArr[0] + " " + lineArr[1];

System.out.println(sdf.parse(logDate)); //.............时间转换问题

logInfo.setLog1(sdf.parse(logDate));

logInfo.setLog2(lineArr[2]);

logInfo.setLog3(lineArr[3]);

logInfo.setLog4(lineArr[4]);

logInfo.setLog5(lineArr[5].substring(1, lineArr[5].length() - 1));

logInfo.setLog6(lineArr[6].substring(1));

logInfo.setLog8(lineArr[7].substring(0, lineArr[7].length() - 1));

String accessUrl= lineArr[7];

String[] accessUrlArr= accessUrl.split("/");

logInfo.setItemName(accessUrlArr[3]);

logInfo.setLog9(lineArr[8]);

logInfo.setLog10(lineArr[9]);

logInfo.setLog11(lineArr[10]);

logInfo.setLog12(lineArr[11]);

String[] uaHead= new String[len - 13];

System.arraycopy(lineArr,12, uaHead, 0, len - 13);//数组拷贝,a表示源数组,b表示源数组要复制的起始位置,c表示目标数组,d表示目标数组起始位置,e表示要复制的长度。

logInfo.setLog13(StringUtils.join(uaHead));

logInfo.setFileType(lineArr[len- 1]);

logInfoList.add(logInfo);

}

read.close(); //输入流关闭

}}

你可能感兴趣的:(java读取数据批量文件)