数据挖掘DMS代码JAVA.docx

上传人:b****5 文档编号:5051131 上传时间:2022-12-12 格式:DOCX 页数:18 大小:20.01KB
下载 相关 举报
数据挖掘DMS代码JAVA.docx_第1页
第1页 / 共18页
数据挖掘DMS代码JAVA.docx_第2页
第2页 / 共18页
数据挖掘DMS代码JAVA.docx_第3页
第3页 / 共18页
数据挖掘DMS代码JAVA.docx_第4页
第4页 / 共18页
数据挖掘DMS代码JAVA.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据挖掘DMS代码JAVA.docx

《数据挖掘DMS代码JAVA.docx》由会员分享,可在线阅读,更多相关《数据挖掘DMS代码JAVA.docx(18页珍藏版)》请在冰豆网上搜索。

数据挖掘DMS代码JAVA.docx

数据挖掘DMS代码JAVA

packagecom.tarena.dms。

importjava.io.BufferedReader。

importjava.io.File。

importjava.io.FileInputStream。

importjava.io.FileNotFoundException。

importjava.io.FileReader。

importjava.io.IOException。

importjava.io.InputStream。

importjava.io.OutputStream。

importjava.io.PrintWriter。

importjava.io.RandomAccessFile。

import.Socket。

importjava.util.ArrayList。

importjava.util.List。

importjava.util.Properties。

importjava.util.Scanner。

importjavax.swing.JFrame。

publicclassDMSClient{

privateDMSClientFrameframe。

/**

*用于保存日志文件读取位置

*/

privateFilepositionFile。

/**

*用readLogs生成的文本日志文件

*/

privateFiletextLogFile。

/**

*原始的unix日志文件

*/

privateFilelogFile。

publicstaticfinalintLOG_LENGTH=372。

publicstaticfinalshortLOGIN=7。

publicstaticfinalshortLOGOUT=8。

privatePropertiesconfig。

privateintbatch。

privateFilematchedLogFile。

privateFileloginFile。

privateStringserverHost。

privateintserverPort。

/**

*利用构造器初始化对象属性

*/

publicDMSClient(>{

//读取配置文件,利用配置文件初始化参数对象

config=newProperties(>。

try{

config.load(newFileInputStream("client.properties">>。

b5E2RGbCAP

}catch(IOExceptione>{

e.printStackTrace(>。

thrownewRuntimeException(e>。

}

logFile=newFile(config.getProperty("log.file">>。

p1EanqFDPw

positionFile=newFile(config.getProperty("position.file">>。

DXDiTa9E3d

textLogFile=newFile(config.getProperty("text.log.file">>。

RTCrpUDGiT

batch=Integer.parseInt(config.getProperty("batch">>。

5PCzVD7HxA

matchedLogFile=newFile(config.getProperty("matched.log.file">>。

jLBHrnAILg

loginFile=newFile(config.getProperty("login.log.file">>。

xHAQX74J0X

serverHost=config.getProperty("server.ip">。

serverPort=Integer.parseInt(config.getProperty("server.port">>。

LDAYtRyKfE

}

publicvoidshowReadLogsMsg(Stringmsg>{

if(frame==null>{

System.out.println(msg>。

}else{

frame.showReadLogsMsg(msg>。

}

}

/**

*读取日志文件

*/

publicvoidreadLogs(>{

//要保证在调用readLog(>时logFile变量要有适用的对象

if(!

logFile.exists(>>{

showReadLogsMsg("没有unix日志文件!

">。

return。

}

if(textLogFile.exists(>>{

showReadLogsMsg("文本文件存在!

本次不读取了!

">。

return。

}

//读取上回位置判断是否有新记录产生

intn=0。

//上次读取的记录号

Scannerin=null。

if(positionFile.exists(>>{

try{

in=newScanner(positionFile>。

n=in.nextInt(>。

showReadLogsMsg("读取本次记录号"+n>。

}catch(IOExceptione>{

e.printStackTrace(>。

showReadLogsMsg("没有读取位置文件,从0读取。

">。

n=0。

}finally{

if(in!

=null>{

in.close(>。

}

}

}

//检查是否有新记录产生

if(n*LOG_LENGTH==logFile.length(>>{

showReadLogsMsg("没有新记录产生!

">。

return。

}

//数据检查结束

//日志读取:

从当前记录n开始,每次读取一批数据到log.txt

//批次:

每批次10个<最大)

//打开输入文件RandomAccessFile

//打开输出文件PrintWriter先创建一个临时文件作为输出文件,等文件用完后再改名为log.txtZzz6ZB2Ltk

//使用循环从输入文件读取数据,写出输出文件

//intbatch=10。

RandomAccessFileraf=null。

PrintWriterout=null。

//临时文件,使用系统时间作文件名

Filetemp=newFile(System.currentTimeMillis(>+".txt">。

dvzfvkwMI1

showReadLogsMsg("使用临时文件"+temp>。

try{

raf=newRandomAccessFile(logFile,"r">。

showReadLogsMsg("打开文件"+logFile>。

showReadLogsMsg("文件长度:

"+raf.length(>>。

//输出目标是临时文件

out=newPrintWriter(temp>。

showReadLogsMsg("打开临时文件"+temp>。

inti。

//利用i得到下回读取的起始位置

//for循环读取10条记录或到文件末尾就结束

for(i=0。

i

i++>{

//假设n=10,batch=10

//i=10,11....19

intn1=n+i。

showReadLogsMsg("偏移量:

"+raf.getFilePointer(>>。

if(raf.getFilePointer(>==(raf.length(>-1>>{break。

}

Stringlog=readLog(raf,n1>。

if(log==null>{break。

}

showReadLogsMsg("读取日志"+n1+":

"+log>。

out.println(log>。

showReadLogsMsg("写出日志"+log>。

}

//记录最后读取位置

n=n+i。

PrintWriterw=newPrintWriter(positionFile>。

w.println(n>。

showReadLogsMsg("保存下次读取记录号:

"+n>。

w.close(>。

}catch(Exceptione>{

e.printStackTrace(>。

}finally{

try{

if(raf!

=null>{

raf.close(>。

}

if(out!

=null>{

out.close(>。

}

}catch(IOExceptione>{

e.printStackTrace(>。

}

showReadLogsMsg("关闭文件">。

}

//将临时文件改名

if(!

temp.renameTo(textLogFile>>{

showReadLogsMsg("临时文件改名失败!

">。

}

showReadLogsMsg("临时文件改名为log.txt">。

}

publicvoidshowMatchLogs(Stringmsg>{

if(frame==null>{

System.out.println(msg>。

}else{

frame.showMatchLogsMsg(msg>。

}

}

publicvoidmatchLogs(>{

showMatchLogs("开始匹配日志数据">。

if(!

textLogFile.exists(>>{

showMatchLogs("没有找到输入数据:

"+textLogFile>。

return。

}

if(matchedLogFile.exists(>>{

showMatchLogs("匹配数据存在,"+matchedLogFile+"发送后才能继续匹配">。

rqyn14ZNXI

return。

}

Listlogs=newArrayList(>。

Listlogins=newArrayList(>。

Listmatched=newArrayList(>。

try{

readLogs(textLogFile,logs>。

//读取log.txt

readLogs(loginFile,logs>。

//读取login.txt

showMatchLogs("读取文件:

"+textLogFile+","+loginFile>。

}catch(Exceptione>{

showError(e>。

showMatchLogs("读取文失败:

"+e>。

return。

}

//匹配处理

for(Loglog:

logs>{

if(log.getType(>==LOGIN>{

Loglogin=log。

showMatchLogs("发现登录记录:

"+login>。

Loglogout=findLogoutByLogin(logs,login>。

showMatchLogs("查找登录记录:

"+logout>。

if(logout==null>{

logins.add(login>。

showMatchLogs("单条登录记录:

"+login>。

}else{

matched.add(newLogPair(login,logout>>。

showMatchLogs("记录对:

"+login+","+logout>。

}

}

}

//保存文件

FiletempM=newFile(System.currentTimeMillis(>+"m.txt">。

EmxvxOtOco

FiletempL=newFile(System.currentTimeMillis(>+"l.txt">。

SixE2yXPq5

try{

//先保存到临时文件,保存成功再改名为正式文件

save(matched,tempM>。

save(logins,tempL>。

showMatchLogs("保存文结束!

"+tempM+","+tempL>。

if(tempM.renameTo(matchedLogFile>>{

loginFile.delete(>。

textLogFile.delete(>。

tempL.renameTo(loginFile>。

}

showMatchLogs("删除文成功">。

}catch(Exceptione>{

showError(e>。

showMatchLogs("保存文件失败">。

return。

}

showMatchLogs("结束匹配日志数据">。

}

/**

*将list每个元素用文本写出

*@paramlist

*@paramfile

*/

privatevoidsave(Listlist,Filefile>throwsIOException{6ewMyirQFL

PrintWriterout=newPrintWriter(file>。

try{

for(Objectobj:

list>{

//调用Log或LogPair的重写的toString(>

out.println(obj>。

//调用对象toString(>

}

}catch(Exceptione>{

thrownewIOException(e>。

}finally{

if(out!

=null>{

out.close(>。

}

}

}

/**

*在logs中根据login找logout

*@paramlogs

*@paramlogin

*@return

*/

privateLogfindLogoutByLogin(Listlogs,Loglogin>{kavU42VRUs

//查找每个登录日志如果这个登录日志是登出状态而且用户名进程号和ip都一致就匹配上

for(Loglog:

logs>{

if(log.getType(>==LOGOUT>{

if(log.getUser(>.equals(login.getUser(>>&&

log.getPid(>==login.getPid(>&&

log.getIp(>.equals(login.getIp(>>>{

returnlog。

}

}

}

returnnull。

}

/**

*将文件内容读取到集合中,如果文件不存在就不读取了

*@paramfile

*@paramlogs

*/

privatevoidreadLogs(Filefile,Listlogs>throwsIOException{y6v3ALoS89

if(!

file.exists(>>{

return。

}

BufferedReaderin=newBufferedReader(newFileReader(file>>。

M2ub6vSTnP

try{

Stringstr。

while((str=in.readLine(>>!

=null>{

logs.add(newLog(str>>。

}

}catch(Exceptione>{

showError(e>。

throwe。

}finally{

if(in!

=null>{

in.close(>。

}

}

}

publicvoidshowError(Exceptione>{

if(frame==null>{

e.printStackTrace(>。

}else{

frame.showErrorMsg(e>。

}

}

publicvoidshowSendMsg(Stringmsg>{

if(frame==null>{

System.out.println(msg>。

}else{

frame.showSendMsg(msg>。

}

}

/**

*将匹配数据发送到服务器

*/

publicvoidsendLogs(>{

showSendMsg("开始发送数据">。

if(!

matchedLogFile.exists(>>{

showSendMsg("发送数据不存在!

">。

return。

}

Listlist=newArrayList(>。

readFile(matchedLogFile,list>。

Sockets=null。

try{

showSendMsg("连接到服务器:

"+serverHost+":

"+serverPort>。

s=newSocket(serverHost,serverPort>。

showSendMsg("连接成功">。

InputStreamin=s.getInputStream(>。

OutputStreamout=s.getOutputStream(>。

showSendMsg("向服务器发送数据">。

//向服务器发送数据

NetService.send(out,list>。

//response:

响应,服务器响应结果

Listresponse=NetService.receive(in>。

showSendMsg("得到服务器响应:

"+response>。

if(response.contains("OK">>{

matchedLogFile.delete(>。

showSendMsg("删除已发送数据文件"+matchedLogFile>。

}

}catch(Exceptione>{

showError(e>。

}finally{

if(s!

=null>{

try{

s.close(>。

}catch(IOExceptione>{

e.printStackTrace(>。

}

}

showSendMsg("关闭网络连接">。

}

showSendMsg("发送数据结束">。

}

/**

*读取匹配成对的日志数据到集合中

*@paramfile

*@paramlist

*/

privatevoidreadFile(Filefile,Listlist>{0YujCfmUCw

Scannerin=null。

try{

in=newScanner(file>。

while(in.hasNext(>>{

Stringstr=in.nextLine(>。

//System.out.println(str>。

list.add(str>。

}

}catch(FileNotFoundExceptione>{

e.printStackTrace(>。

}finally{

if(in!

=null>{

in.close(>。

}

}

}

/**

*DMSClient的start<)方法

*/

publicvoidstart(>{

//启动主流程时显示界面,单元测试时没有界面

frame=newDMSClientFrame(>。

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE>。

eUts8ZQVRd

frame.setVisible(true>。

while(true>{

readLogs(>。

//读取日志

matchLogs(>。

//匹配日志

sendLogs(>。

//发送日志

try{

Thread.sleep(5000>。

}catch(InterruptedExceptione>{

e.printStackTrace(>。

}

}

}

publicstaticvoidmain(String[]args>{

DMSClientclient=newDMSClient(>。

//启动客户端的主处理流程

client.start(>。

}

/**

*读取日志数据

*@paramin被读取的日志文件

*@paramn记录号从0开始

*@return文本格式日志数据

*如:

user,pid,type,time,ip

*@throwsException

*/

publicStringreadLog(RandomAccessFilein,intn>throwsIOException{sQsAEJkW5T

intstart=372*n。

byte[]buf=newbyte[32]。

in.seek(start+0>。

in.read(buf>。

//连续读32个byte

Stringuser=newString(buf,"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1