`

java中处理日志读文件的java代码

    博客分类:
  • java
阅读更多
一、处理日志读取文件、过滤文件
package com.bhu.defender.front.controller;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.bhu.basestation.exception.BaseException;
import com.bhu.defender.front.core.service.AlarmProcesserProxy;
import com.bhu.defender.front.core.service.UserServiceProxy;
/**
 * 
 * @ClassName: LogAlarmStatController
 * @Description: 处理日志 添加数据到告警统计表st_Alarm_stat
 * @author:lijunling 2013-6-17 下午4:22:11
 * @version V1.0
 */
public class QuartzJob
{
	/**
	 * 插入数据 开始执行任务的方法
	 * @throws IOException 
	 */
    public void logInsetAlarmStat() throws IOException
    {
    	SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    	//获取上次执行的时间
    	String lastFileTime="";
    	Date lastDate = AlarmProcesserProxy.selectMaxCreateTime();
    	if(null!=lastDate){
    		lastFileTime = format.format(lastDate);
    	}
    	
    	//本次执行的时间
    	Calendar calendar = Calendar.getInstance();
    	calendar.add(Calendar.DATE, -1);
    	Date date = calendar.getTime();
    	String fileTime = format.format(date);
    	
    	//判断上次执行日期是否是昨天 ,若是昨天,则只执行今天的操作 ,若非昨天,则从上次执行到今天均执行 
    	//如:此次fileTime=07-04   lastFileTime=07-03  则处理日志07-03.log  和07-04.log
    	if(!(lastFileTime.equals(fileTime))){
    		Long LastTime = lastDate.getTime();
    		Long thisTime = date.getTime();
    		while(LastTime<thisTime){
        		Logger logger= LoggerFactory.getLogger("basestation."+format.format(LastTime)+".log");
        		String filename = logger.getName();
        		String strPath = "/home/logs/"+filename;
        		excuteFile(strPath);
        		//执行完毕后 日期加1
        		Calendar cd = Calendar.getInstance();   
                cd.setTime(lastDate);  
                cd.add(Calendar.DATE, +1);
                lastDate = cd.getTime();
                LastTime = cd.getTime().getTime();
    		}
    	}else{
    		Logger logger= LoggerFactory.getLogger("basestation."+fileTime+".log");
    		String filename = logger.getName();
        	//String filename ="basestation.2013-07-03.log";
        	//String strPath = "C:/Users/andy/Downloads/"+filename;
        	String strPath = "/home/logs/"+filename;
        	excuteFile(strPath);
    	}
    }  
    
    /**
     * 执行文件
     * @param strPath 文件路径
     * @throws IOException 
     */
    private void excuteFile(String strPath) throws IOException{
    	List <Integer> rowcountList = getRowList(strPath);//获取行的list
    	List <List> allContentList = new ArrayList<List>();
    	if(rowcountList.size()!=0){
    		for(Integer item : rowcountList){
    			List<String> contentList = readAppointLineNumber(strPath,item);
    			//若list中的最后一样含有result=0 则表示成功 是需要的数据  若为1则不成功 过滤掉
    			String lastRowStr  = contentList.get(contentList.size()-1);
    			if(lastRowStr.contains("result=0")){
    				allContentList.add(contentList);
    			}
    		}
    	}
    	processDataList(allContentList);
    }
    /**
     * 自动更新密码开始执行
     */
    public void autoUpdateRandompsw(){
    	try {
			UserServiceProxy.autoUpdateRandompsw();
		} catch (BaseException e) {
			e.printStackTrace();
		}
    }
    /**
     * 根据行号读取文本内容 返回list
     * @param path 文件路径
     * @param lineNumber 行号
     * @return
     * @throws IOException
     */
    private List<String> readAppointLineNumber(String path,int lineNumber) throws IOException{
    	 List<String> contentList = new ArrayList<String>();
    	 FileReader file = new FileReader(path);
    	 LineNumberReader reader = new LineNumberReader(file);
    	 String readline = "";
    	 int lines=0;
    	 while(readline != null){
    		 lines++;
    		 readline = reader.readLine();
    		 int sub = lines - lineNumber;
    		 //获取该行号开始的后几行
    		 if(sub>=0 && sub<=7) {
    			 //System.out.println("当前行号为:"+reader.getLineNumber());
    			 //System.out.println("=====s:"+readline);
    			 contentList.add(readline);
             }else if(sub>7){
            	 //System.exit(0);  
             }
    	 }
    	 reader.close();
    	 file.close();
    	 return contentList;
    }
  
    /**
     * 根据文件名返回存在需要的数值的行号的list
     * @param path 文件路径
     * @return
     * @throws IOException
     */

    private List<Integer> getRowList(String path) throws IOException{
    	FileReader file=new FileReader(path);
    	List<Integer> rowcountList = new ArrayList<Integer>();//记录行号,第几行有需要的数据
    	BufferedReader br=new BufferedReader(file);
    	String temp=null;
    	int rowCount=0;
    	while((temp =br.readLine())!=null){
    		rowCount++;
    		/*按行读取  行中包含 am=addAlarmRealtime的记录行号*/
    		Pattern pattern = Pattern.compile("am=addAlarmRealtime");
    		Matcher matcher = pattern.matcher(temp);
    		if(matcher.find()){
    			rowcountList.add(rowCount);
    		}
    	}
    	br.close();
    	file.close();
    	return rowcountList;
    }
    
   /**
    * 根据需要的文本内容解析数据字段
    * @param allContentList
    */
    private void processDataList(List <List> allContentList){
    	for(List item:allContentList){
    		if(item.size()!=0){
    			String alarmTimeStr = "";
				String alarmTypeIdStr = "";
				String terminalCodeStr = "";
				String terminalPortIdStr = "";
				String typeStr = "";
    			for(int i=0;i<item.size();i++){
    				String []itemStr = item.get(i).toString().split(":");
    				if(itemStr.length>1){
    					if(i == 1){
    						alarmTimeStr = filterStr(itemStr[1]);
    					}else if(i == 2){
    						alarmTypeIdStr = filterStr(itemStr[1]);
    					}else if(i == 3){
    						terminalCodeStr = filterStr(itemStr[1]);
    					}else if(i == 4){
    						terminalPortIdStr = filterStr(itemStr[1]);
    					}else if(i == 5){
    						typeStr =  itemStr[1];
    					}
    				}
    			}
    			alarmTimeStr = alarmTimeStr.substring(0, 10);
    			AlarmProcesserProxy.logInsertAalrmStat(terminalCodeStr,Integer.parseInt(alarmTypeIdStr),Integer.parseInt(terminalPortIdStr),alarmTimeStr);
    		}
    	}
    }
    
    /**
     * 过滤空格、双引号、单引号
     * @param str
     * @return
     */
    private String filterStr(String str){
    	str = str.replace("\"", "").replace(",", "").trim();
    	return str;
    }
}
分享到:
评论

相关推荐

    java日志文件过滤

    总的来说,这个“java日志文件过滤”项目提供了一个便捷的工具,帮助开发者快速处理和分析日志数据,提高了问题排查和系统监控的效率。通过学习和理解这个项目,你可以深化对Java日志处理、文件I/O和条件过滤等技术...

    java 读取文件 文件读取操作

    这里每次读取一个字符,并打印出来,同时避免在Windows系统中处理换行符的特殊情况。 3. **按行读取文件内容** 对于文本文件,尤其是日志或配置文件,按行读取文件内容更为常见。Java提供`java.io.BufferedReader...

    java如何读取文件

    在Java编程语言中,读取文件是一项常见的操作,尤其是在处理数据、日志文件或配置信息时。本文将详细解析如何使用Java读取文本文件,基于提供的代码示例,深入探讨其工作原理及最佳实践。 ### Java读取文本文件的...

    java读取txt文件代码

    从给定的文件信息来看,主要关注点在于Java读取TXT文件的代码示例,以及如何处理和操作从TXT文件中读取的数据。下面将详细解释这一知识点。 ### Java读取TXT文件的基本流程 在Java中,读取TXT文件通常涉及以下几个...

    Java读取解析GRIB2文件

    在Java中处理GRIB2文件通常需要借助特定的库,例如ECMWF(欧洲中期天气预报中心)的JGRIB2库或Unidata的NetCDF-Java库。下面将详细介绍如何使用Java进行GRIB2文件的读取和解析。 1. **理解GRIB2文件结构**: GRIB2...

    java文件上传,断点续传+aop操作日志

    在Java开发中,文件上传和下载是常见的功能需求,尤其在Web应用中。"java文件上传,断点续传+aop操作日志"这个主题涵盖了几个关键知识点:文件上传、断点续传技术、AOP(面向切面编程)以及操作日志记录。 1. **...

    java算法,从txt文件中读取数据录入mysql

    在Java编程中,将数据从TXT文件读取并导入MySQL数据库是一项常见的任务,涉及到文件操作、字符串处理以及数据库交互等多个知识点。以下是对这些关键概念的详细解释: 1. **文件操作**:`FileOper.java`可能包含了对...

    一个Java写的日志分析工具

    源代码通常会包含多个类,每个类可能对应着日志分析的一个特定步骤,比如读取日志文件、解析日志格式、处理分析结果等。 总的来说,这个Java日志分析工具提供了对日志数据进行处理和分析的功能,通过阅读源代码,...

    java swing用Logger输出错误日志.docx

    总之,Java Swing应用可以通过`java.util.logging`包中的`Logger`类,结合`logging.properties`配置文件或在代码中动态设置,实现对错误日志的记录和管理。这不仅可以帮助开发者调试程序,也是生产环境中监控系统...

    STL.zip_java读取stl_stl读取 java

    这个"STL.zip_java读取stl_stl读取_java"的主题涉及到使用Java编程语言来处理ASCII格式的STL文件。在Java中读取STL文件可以帮助我们解析其内部的几何数据,例如三角面片的顶点坐标,从而进行3D模型的构建和分析。 ...

    Java多线程读取大文本文件并批量插入MongoDB的实战代码

    适合做大量文本数据或日志文件入库的场景,大文本被拆分成多个线程处理,速度快。 批量插入MongoDB,存在则更新,不存在则自动新增。 包含Main方法调用案例,基于接口的通用设计,业务模块可自定义实现具体逻辑。

    java发送syslog日志,支持多目的ip

    Java发送Syslog日志是一种常见的系统日志管理方式,尤其在分布式系统中,它能帮助开发者收集、分析和处理来自不同节点的日志信息。Syslog协议是一个标准的日志消息传递协议,广泛应用于网络设备、操作系统和其他软件...

    java访问共享文件

    这篇博客文章可能详细解释了如何在Java环境中实现对远程文件系统的访问,以便读取、写入或管理共享文件。 在Java中,可以使用开源库如jcifs(Java CIFS Client)来处理SMB/CIFS协议。jcifs库提供了SmbFile类,它...

    java异步写日志到文件中实现代码

    * 日志文件的管理:使用PrintWriter类来写日志到文件中,并使用synchronized关键字来防止多线程同时操作日志文件。 * 异步写日志的实现:使用线程池或Executor框架来实现异步写日志,以提高日志记录的速度和效率。 ...

    java版everything+纯java不用任何包读取office中word文件

    此外,描述中还提到了“java读取压缩文件解包压缩文件等各种文件操作类”,这意味着这个项目可能包含了一套完整的文件操作工具集,包括: - **压缩文件**:使用`ZipOutputStream`可以创建ZIP文件,将多个文件或目录...

    java 格式代码模板

    在编程世界中,保持代码的一致性和可读性至关重要,这就是`Java`代码格式化和模板工具的作用。本文将深入探讨`Java`代码格式代码模板(code templates)和代码格式化器(code formatter),以及如何利用它们提升开发...

    java读取dlt645所需文件

    如果你的DLL文件包含了读取DLT645数据的原生函数,那么你需要使用这些技术将Java代码与DLL功能关联起来。 3. **Jar包**:Java Archive(JAR)文件是Java平台特有的归档格式,用于打包类文件、资源文件等。如果你的...

    java工具类,日志处理类

    描述中提到的“日志处理类Log”可能具备这样的功能,而且它允许我们在程序运行过程中,无需重启,就能动态读取配置文件,这意味着我们可以在不中断服务的情况下调整日志策略。 具体到“动态读取配置文件”,这通常...

    java 读取Ftp指定位置的文件解析并入库

    标题 "java 读取Ftp指定位置的文件解析并入库" 涉及到的是使用Java编程语言通过FTP(File Transfer Protocol)协议从远程服务器上下载文件,然后对下载的文件进行解析,并将解析得到的数据存储到数据库中。...

    java zookeeper kafka 日志处理

    生产者(Producer)是Java代码的一部分,它负责将日志事件转换为消息并发布到Kafka的特定主题。消费者(Consumer)则订阅这些主题,处理和分析日志数据。 在日志处理系统中,Kafka可以与其他工具如Logstash或Flume...

Global site tag (gtag.js) - Google Analytics