package com.yesky.apachelog.task;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import com.yesky.apachelog.Property;
import com.yesky.apachelog.model.ApacheDBObject;
import com.yesky.apachelog.model.ObjectActionSum;
import com.yesky.apachelog.model.ObjectDetail;
import com.yesky.apachelog.service.IApacheRegexDAOService;
import com.yesky.apachelog.service.IObjectActionSumService;
import com.yesky.apachelog.util.file.ApacheSparaFileDelTool;
public class ApacheTask {
private List<ApacheDBObject> apacheOList = new ArrayList<ApacheDBObject>();
private IApacheRegexDAOService apacheDaoService;
private IObjectActionSumService actionService;
private List<String> numList = new ArrayList<String>();
public void doTask() {
// 日志文件路径
String fileAndPath = Property.fileAndPath;
// 拆分文件存放路径
String currentPath = Property.currentPat;
// 拆分文件,行数
long fileLineNum = Property.fileLineNum * 10000;
String file[] = fileAndPath.split(",");
for (int i = 0; i < file.length; i++) {
String filePath = file[i];
System.out.println("日志文件路径===============" + filePath);
List<String> separaFileList = apacheDaoService.separatorFileByPath(
filePath, currentPath, fileLineNum);
Iterator<String> it = separaFileList.iterator();
while (it.hasNext()) {
String sparaFilePath = (String) it.next();
System.out.println("拆分文件路径===============" + sparaFilePath);
readSparatorFileByPath(sparaFilePath, fileLineNum);
}
}
}
/**
* 读取拆分后的文件,并把记录出入数据
*
* @param sparaFilePath:拆分后的文件路径
*/
public void readSparatorFileByPath(String sparaFilePath, long fileLineNum) {
System.out.println("-------------读取文件-------------");
FileReader fr = null;
try {
fr = new FileReader(sparaFilePath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
BufferedReader buf = new BufferedReader(fr, 10 * 1024 * 1024);
String temp = null;
try {
while ((temp = buf.readLine()) != null) {
System.out.println("00000000000000000000000000000");
numList.add(temp);
if (numList.size() % fileLineNum == 0) {
apacheOList.addAll(apacheDaoService
.getDBObListjectFromaLineString(numList));
numList.clear();
if (apacheOList != null && (apacheOList.size() % 5000 == 0)) {
System.out
.println("-------------2222222222222222------------");
this.insertDbLogBatch(apacheOList);
apacheOList.clear();
}
}
}
if (numList != null && numList.size() > 0) {
apacheOList.addAll(apacheDaoService
.getDBObListjectFromaLineString(numList));
numList.clear();
this.insertDbLogBatch(apacheOList);
apacheOList.clear();
}
System.out.println("-------------文件结束------------ "
+ apacheOList.size());
if (apacheOList != null && apacheOList.size() > 0) {
System.out.println("-------------进入数据------------");
this.insertDbLogBatch(apacheOList);
apacheOList.clear();
}
buf.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (buf != null) {
try {
buf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ApacheSparaFileDelTool delTool = new ApacheSparaFileDelTool();
boolean b = delTool.DeleteFolder(sparaFilePath);
if (b) {
System.out.println("删除文件成功 !!!!");
}
}
/**
* 向数据库添加记录
*
* @param dblog:dblog的list对象(符合条件的)
*/
public void insertDbLogBatch(final List<ApacheDBObject> dblog) {
Iterator<ApacheDBObject> it = dblog.iterator();
System.out.println("插入数据库。。。。。。。。。。。。。。。dblog。。" + dblog.size());
while (it.hasNext()) {
ApacheDBObject log = (ApacheDBObject) it.next();
ObjectActionSum objectActionSumVO = new ObjectActionSum();
ObjectDetail objectDetail = new ObjectDetail();
String name = log.getModuleName().trim();
System.out.println("-----------name = " + name);
if (("1").equals(name) || ("2").equals(name)) {
// 电影
if (("1").equals(name)) {
Integer srcid = Integer.parseInt(log.getSrcId());
objectActionSumVO.setTarObjTypeId(3);// 电影库类型
objectActionSumVO.setSrcObjTypeId(3);// 电影库类型
// 模块名称
objectActionSumVO.setSuffix("MOVIE");
objectActionSumVO.setTarObjId(Integer.parseInt(log
.getTargetId()));
objectActionSumVO.setSrcObjId(srcid);
objectActionSumVO.setStatus(1);
objectActionSumVO.setActionId(41);// 动作为看了又看
objectActionSumVO.setScore(0);
objectActionSumVO.setActionTime(new Date());
objectActionSumVO.setActionCount(1);
objectActionSumVO.setTableName("MOVIE" + "_"
+ String.valueOf(srcid / 10000 + 1));
objectDetail.setObjId(objectActionSumVO.getSrcObjId());
objectDetail.setSuffix(objectActionSumVO.getSuffix());
} else if (("2").equals(name))// 产品
{
Integer srcid = Integer.parseInt(log.getSrcId());
objectActionSumVO.setTarObjTypeId(1);// 产品库类型
objectActionSumVO.setSrcObjTypeId(1);// 产品库类型
// 模块名称
objectActionSumVO.setSuffix("CPK");
objectActionSumVO.setTarObjId(Integer.parseInt(log
.getTargetId()));
objectActionSumVO.setSrcObjId(srcid);
objectActionSumVO.setStatus(1);
objectActionSumVO.setActionId(41);// 动作为看了又看
objectActionSumVO.setScore(0);
objectActionSumVO.setActionTime(new Date());
objectActionSumVO.setActionCount(1);
objectActionSumVO.setTableName("CPK" + "_"
+ String.valueOf(srcid / 10000 + 1));
objectDetail.setObjId(objectActionSumVO.getSrcObjId());
objectDetail.setSuffix(objectActionSumVO.getSuffix());
}
System.out.println("objectDetail === "
+ objectDetail.getSuffix());
// 创建表
this.createObjectActionSumTable(objectDetail);
// 更新记录
int count = this.actionService
.updateObjectActionSum(objectActionSumVO);
// 如果记录不存在,添加新纪录
if (count <= 0) {
this.actionService.insertObjectActionSum(objectActionSumVO);
}
} else {
System.out
.println("暂时不处理--------------------------------------");
}
}
}
public void createObjectActionSumTable(ObjectDetail objectDetail) {
String tableName = null;
ObjectActionSum objectActionSumVO = new ObjectActionSum();
System.out
.println("要创建的表:........................objectDetail.getSuffix()........... "
+ objectDetail.getSuffix());
try {
if (objectDetail != null && objectDetail.getSuffix() != null) {
tableName = objectDetail.getSuffix().toUpperCase() + "_"
+ String.valueOf((objectDetail.getObjId() / 10000) + 1);
System.out.println("要创建的表:................................... "
+ tableName);
objectActionSumVO.setTableName(tableName);
actionService.createObjSumTable(objectActionSumVO);
actionService.createObjSumTableIndex(objectActionSumVO);
}
} catch (Exception e) {
System.out.println("要创建的表:OBJ_ACTION_SUM_" + tableName + "已存在。");
}
}
public IObjectActionSumService getActionService() {
return actionService;
}
public void setActionService(IObjectActionSumService actionService) {
this.actionService = actionService;
}
public IApacheRegexDAOService getApacheDaoService() {
return apacheDaoService;
}
public void setApacheDaoService(IApacheRegexDAOService apacheDaoService) {
this.apacheDaoService = apacheDaoService;
}
}
分享到:
相关推荐
本文将详细介绍如何使用C#语言对文本文件进行高效的IO操作,并展示一种特定的数据处理方式。 #### 二、背景 根据题目描述,我们需要处理的是一个包含学生学号及各科成绩的文本文件。文件中的每一行代表一个学生的...
Java IO(Input/Output)操作是Java编程中的基础部分,主要负责数据的读取和写入。在Java中,InputStream 和 ...在实际项目中,根据需求选择合适的流类型和操作方式,可以更好地处理各种数据输入输出场景。
总之,Android文件IO操作是应用程序开发中不可或缺的部分,理解和掌握这些知识点对于开发高效、稳定且用户友好的应用至关重要。通过合理的文件管理,不仅可以优化性能,还能确保数据的安全性和可靠性。
### Linux文件IO操作详解 #### 基本概念 Linux 文件 I/O 操作是学习 Linux 应用开发的基础,尤其对于初学者来说至关重要。本文旨在详细介绍 Linux 下的文件 I/O 操作及其相关概念。 #### 文件 在 Linux 系统中,...
根据提供的文件信息,本文将详细解析“IO操作实验手册”中的关键知识点,主要包括CC2430芯片的I/O引脚功能及配置方法,并通过实验加深对寄存器配置的理解。 ### IO操作实验手册核心知识点 #### 1. CC2430芯片I/O...
BasicIO库通过提供用户级API和内核驱动的方式,为开发者提供了一个安全且易于使用的途径,避免了直接使用内核编程带来的复杂性。 使用该库进行端口操作的基本流程如下: 1. **初始化**:应用程序启动时,需要加载并...
4. **适用场景**:标准IO适合文本处理和简单文件操作,而文件IO更适合底层系统编程或高效IO操作。 为了更好地理解和对比这两种IO方式,可以参考以下资源: - **标准IO跟文件IO区别.pdf**:这个文档可能详细分析了...
在二进制模式下进行IO操作,可以高效地处理非文本数据,例如图像、音频文件或者自定义数据结构。 首先,要进行二进制读写,我们需要包含`fstream`头文件,并创建`ifstream`(输入文件流)或`ofstream`(输出文件流...
操作系统中的输入/输出(Input/Output,简称IO)模型是计算机科学中的重要...理解和掌握这些模型对于优化系统性能、编写高效IO程序至关重要。在实际开发中,开发者可能需要结合使用多种模型,以实现最佳的系统设计。
### WIZ820io操作手册关键知识点 #### 一、引言与概述 WIZ820io是由WIZnet公司推出的一款全硬件TCP/IP协议栈网络模块,旨在为用户提供一种快速、简便且高效的以太网解决方案。该模块的核心是W5200芯片,这是一款...
STM32微控制器的IO口操作是学习STM32基础中的重要一环。STM32的GPIO(General Purpose Input ...掌握IO口的基本操作,是实现高效、可靠项目设计的基础。在STM32的学习与应用过程中,这些知识点是必须要熟悉和理解的。
本文将深入探讨“IO操作例程”,特别是针对并口资源的IO操作,以及如何将其集成到C++编程环境,尤其是Windows平台下的应用。 首先,"并口"(Parallel Port)是一种古老的接口,最初设计用于打印机连接,它提供了多...
在实际开发中,`commons-io-1.4.jar`可以帮助开发者更高效地处理IO操作,减少错误,提高代码可读性和维护性。例如,`IOUtils.copy()`方法可以轻松实现从一个输入流到另一个输出流的复制,无需手动管理缓冲区和异常...
本教程旨在为初学者提供Java IO操作的基础知识,帮助他们入门并理解这一核心概念。 Java IO库包含了大量类和接口,主要分布在java.io包中,它们提供了对输入输出流的支持。输入流用于从源获取数据,而输出流则用于...
总的来说,通过西门子博途,用户能够创建一个高效的IO监控页面,这不仅提高了工作效率,也提升了系统的可操作性和可维护性。对于那些经常需要监控PLC I/O状态的工程技术人员来说,这样的设计无疑是一个巨大的便利。...
Java IO操作大全主要涵盖对文件和数据的输入输出管理,涉及多种流的使用以及对象序列化等关键概念。下面将详细解析这些知识点。 首先,Java中的IO操作主要基于`java.io`包,这个包提供了丰富的类和接口来处理输入...
1. **跨平台支持**:PlatformIO可在Windows、macOS和Linux等操作系统上运行,提供一致的开发体验。 2. **多框架集成**:它不仅支持Arduino框架,还支持Micropython、CMSIS-DSP、mbed等多个嵌入式开发框架,使得...
这个库为开发者提供了更高效、更便捷的方式来执行常见的文件、目录和流操作。 一、Java IO 基础 Java IO 包含了许多类,如InputStream、OutputStream、Reader、Writer等,它们分别用于处理字节流和字符流。字节流...
在处理大量数据或需要高效响应时间的应用中,异步IO操作显得尤为重要。本文将深入探讨异步读取、异步写入以及文件删除等知识点,并结合实际应用场景进行阐述。 首先,我们来理解异步IO的概念。传统的同步IO操作会...