`

高效io操作方式

 
阅读更多
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 操作,C# IO高性能操作

    本文将详细介绍如何使用C#语言对文本文件进行高效的IO操作,并展示一种特定的数据处理方式。 #### 二、背景 根据题目描述,我们需要处理的是一个包含学生学号及各科成绩的文本文件。文件中的每一行代表一个学生的...

    javaIO操作简单例子

    Java IO(Input/Output)操作是Java编程中的基础部分,主要负责数据的读取和写入。在Java中,InputStream 和 ...在实际项目中,根据需求选择合适的流类型和操作方式,可以更好地处理各种数据输入输出场景。

    Android 文件IO操作

    总之,Android文件IO操作是应用程序开发中不可或缺的部分,理解和掌握这些知识点对于开发高效、稳定且用户友好的应用至关重要。通过合理的文件管理,不仅可以优化性能,还能确保数据的安全性和可靠性。

    Linux文件IO操作

    ### Linux文件IO操作详解 #### 基本概念 Linux 文件 I/O 操作是学习 Linux 应用开发的基础,尤其对于初学者来说至关重要。本文旨在详细介绍 Linux 下的文件 I/O 操作及其相关概念。 #### 文件 在 Linux 系统中,...

    IO操作实验手册

    根据提供的文件信息,本文将详细解析“IO操作实验手册”中的关键知识点,主要包括CC2430芯片的I/O引脚功能及配置方法,并通过实验加深对寄存器配置的理解。 ### IO操作实验手册核心知识点 #### 1. CC2430芯片I/O...

    Windows IO端口操作库

    BasicIO库通过提供用户级API和内核驱动的方式,为开发者提供了一个安全且易于使用的途径,避免了直接使用内核编程带来的复杂性。 使用该库进行端口操作的基本流程如下: 1. **初始化**:应用程序启动时,需要加载并...

    Linux文件IO跟标准IO总结

    4. **适用场景**:标准IO适合文本处理和简单文件操作,而文件IO更适合底层系统编程或高效IO操作。 为了更好地理解和对比这两种IO方式,可以参考以下资源: - **标准IO跟文件IO区别.pdf**:这个文档可能详细分析了...

    IO读写操作c++IO读写操作c++

    在二进制模式下进行IO操作,可以高效地处理非文本数据,例如图像、音频文件或者自定义数据结构。 首先,要进行二进制读写,我们需要包含`fstream`头文件,并创建`ifstream`(输入文件流)或`ofstream`(输出文件流...

    03操作系统IO模型.zip

    操作系统中的输入/输出(Input/Output,简称IO)模型是计算机科学中的重要...理解和掌握这些模型对于优化系统性能、编写高效IO程序至关重要。在实际开发中,开发者可能需要结合使用多种模型,以实现最佳的系统设计。

    WIZ820io操作手册

    ### WIZ820io操作手册关键知识点 #### 一、引言与概述 WIZ820io是由WIZnet公司推出的一款全硬件TCP/IP协议栈网络模块,旨在为用户提供一种快速、简便且高效的以太网解决方案。该模块的核心是W5200芯片,这是一款...

    关于stm32_IO口的基本操作

    STM32微控制器的IO口操作是学习STM32基础中的重要一环。STM32的GPIO(General Purpose Input ...掌握IO口的基本操作,是实现高效、可靠项目设计的基础。在STM32的学习与应用过程中,这些知识点是必须要熟悉和理解的。

    IO操作例程

    本文将深入探讨“IO操作例程”,特别是针对并口资源的IO操作,以及如何将其集成到C++编程环境,尤其是Windows平台下的应用。 首先,"并口"(Parallel Port)是一种古老的接口,最初设计用于打印机连接,它提供了多...

    commons-io-1.4.jar.zip_io流jar

    在实际开发中,`commons-io-1.4.jar`可以帮助开发者更高效地处理IO操作,减少错误,提高代码可读性和维护性。例如,`IOUtils.copy()`方法可以轻松实现从一个输入流到另一个输出流的复制,无需手动管理缓冲区和异常...

    javaIO操作入门

    本教程旨在为初学者提供Java IO操作的基础知识,帮助他们入门并理解这一核心概念。 Java IO库包含了大量类和接口,主要分布在java.io包中,它们提供了对输入输出流的支持。输入流用于从源获取数据,而输出流则用于...

    西门子博途HMI监控1200或1500的IO状态时做成一页,IO监控画面做在一页显示,通过下拉菜单选择,方便快捷,不用一个一个去

    总的来说,通过西门子博途,用户能够创建一个高效的IO监控页面,这不仅提高了工作效率,也提升了系统的可操作性和可维护性。对于那些经常需要监控PLC I/O状态的工程技术人员来说,这样的设计无疑是一个巨大的便利。...

    java io操作大全

    Java IO操作大全主要涵盖对文件和数据的输入输出管理,涉及多种流的使用以及对象序列化等关键概念。下面将详细解析这些知识点。 首先,Java中的IO操作主要基于`java.io`包,这个包提供了丰富的类和接口来处理输入...

    PlatformIO 离线安装资源

    1. **跨平台支持**:PlatformIO可在Windows、macOS和Linux等操作系统上运行,提供一致的开发体验。 2. **多框架集成**:它不仅支持Arduino框架,还支持Micropython、CMSIS-DSP、mbed等多个嵌入式开发框架,使得...

    Java IO commons-io-2.5.jar

    这个库为开发者提供了更高效、更便捷的方式来执行常见的文件、目录和流操作。 一、Java IO 基础 Java IO 包含了许多类,如InputStream、OutputStream、Reader、Writer等,它们分别用于处理字节流和字符流。字节流...

    文件的IO异步读写操作

    在处理大量数据或需要高效响应时间的应用中,异步IO操作显得尤为重要。本文将深入探讨异步读取、异步写入以及文件删除等知识点,并结合实际应用场景进行阐述。 首先,我们来理解异步IO的概念。传统的同步IO操作会...

Global site tag (gtag.js) - Google Analytics