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")
@Transactional
public class ImportController {
    Logger log = Logger.getLogger(this.getClass());

    @Autowired
    private LogInfoService logInfoService;

    @RequestMapping(value = "/importTxt", method = RequestMethod.GET)
    public JsonResp importTxt() throws IOException, ParseException {
        log.debug("开始导入数据");

        String encoding = "GBK";
        List logInfoList = new ArrayList();
        String dir = "E:\\test\\log";
        File[] files = new File(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("保存失败");
        }
        return JsonResp.ok();
    }

    public static void importFile(File file, String encoding, List logInfoList) throws IOException, ParseException {
        InputStreamReader read = null;//考虑到编码格式
        try {
            read = new InputStreamReader(
                    new FileInputStream(file), encoding);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        BufferedReader bufferedReader = new BufferedReader(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 = new LogInfo();
            String logDate = lineArr[0] + " " + lineArr[1];
            System.out.println(sdf.parse(logDate));     //.............时间转换问题
            logInfo.setLogTime(sdf.parse(logDate));
            logInfo.setAccessIp(lineArr[2]);
            logInfo.setProxyIp(lineArr[3]);
            logInfo.setResponseTime(lineArr[4]);
            logInfo.setReferer(lineArr[5].substring(1, lineArr[5].length() - 1));
            logInfo.setMethod(lineArr[6].substring(1));
            logInfo.setAccessUrl(lineArr[7].substring(0, lineArr[7].length() - 1));
            String accessUrl = lineArr[7];
            String[] accessUrlArr = accessUrl.split("/");
            logInfo.setItemName(accessUrlArr[3]);
            logInfo.setHttpcode(lineArr[8]);
            logInfo.setRequestsize(lineArr[9]);
            logInfo.setResponsesize(lineArr[10]);
            logInfo.setCacheHitStatus(lineArr[11]);
            String[] uaHead = new String[len - 13];
            System.arraycopy(lineArr, 12, uaHead, 0, len - 13);
            logInfo.setUaHead(StringUtils.join(uaHead));
            logInfo.setFileType(lineArr[len - 1]);

            logInfoList.add(logInfo);
        }
        read.close();

    }

}

文件导入,成功;

此时,如果数据量特别大时,会出现入库慢的情况,有另一种方法是:读取文件后,将数据按照想要的格式存如新文件中,然后用sql语句(或navicat客户端)导入文件;

原文地址:https://www.cnblogs.com/mufengforward/p/9482996.html

时间: 2024-11-06 22:16:43

java批量读取多个文件并存入数据库的相关文章

Spark1.6.2 java实现读取json数据文件插入MySql数据库

public class Main implements Serializable { /** * */ private static final long serialVersionUID = -8513279306224995844L; private static final String MYSQL_USERNAME = "demo"; private static final String MYSQL_PWD = "demo"; private stati

java读取本地txt文件并插入数据库

package com.cniia.ny.web.control.configManage; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; im

Java中读取properties资源文件

一.通过ResourceBundle来读取.properties文件 /** * 通过java.util.resourceBundle来解析properties文件. * @param String path:properties文件的路径 * @param String key: 获取对应key的属性 * @return String:返回对应key的属性,失败时候为空. */ public static String getPropertyByName1(String path,String

【Java】读取其下所有文件夹与文件的路径

如果在f:\aa文件夹中,有如下图的文件夹与文件: 那么,在Java中,则如此读取f:/aa下的所有文件路径: 1.首先由于用到了文件与容器类下的ArrayList,所以在开头要引入如下包: import java.io.*; import java.util.*; 2.方法如下,其中File dirFile除了盘符,比如f:,以外,能够接受一切合法的路径.由于盘符下含有一些系统文件,拒绝访问,因为读取盘符,可能会出现空指针异常. //这里是仅仅查询当前路径下的所有文件夹.文件并且存放其路径到文

stream流批量读取并合并文件

import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.nio.channels.FileChannel; import java.util

Java 批量反编译class文件,并保持目录结构

jad -o -r -d d:\src -s java C:\Users\spring\Desktop\egorder3.0\WEB-INF\classes\**\*.class -o - overwrite output files without confirmation (default: no) 无需确定覆写文件 -r - restore package directory structrure 恢复包目录结构 -s - output file extension (by default

java nio读取和写入文件

读取 package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.text.MessageFormat; public class Test

Java 一次性读取或写入文件内容

public class IOHelper { public static void copy(Reader in,Writer out) throws IOException { int c = -1; while((c = in.read()) != -1) { out.write(c); } } public static String readFile(File file) throws IOException { if (file != null && file.canRead(

利用chrome插件批量读取浏览器页面内容并写入数据库

试想一下,如果每天要收集100页网页数据甚至更多.如果采用人工收集会吐血,用程序去收集也就成为一个不二的选择.首先肯定会想到说用java.php.C#等高级语言,但这偏偏又有个登陆和验证码,搞到无所适从.还在为收集web端的数据感到苦恼吗?很高兴,你找对地方了. 应用场景: 1.需要每天大量重复收集web端的数据 2.web页面数据需要登陆后才能采集 3.web页面存在翻页 解决方案: 手工登陆,然后采用chrome插件的方式进行收集.当然你会说用selenium等自动化测试的方法进行收集更co