高效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;
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值