java逐行读取文件内容执行sql语句_java批量读取多个文件并存入数据库详解

该博客详细介绍了如何使用Java逐行读取TXT文件内容,解析日志信息,并通过Spring框架批量将数据存入数据库。主要涉及文件I/O操作,日期解析,字符串处理以及数据库批量插入。
摘要由CSDN通过智能技术生成

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

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

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

logInfoList.add(logInfo);

}

read.close();

}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值