单线程解析文件,根据文件关键词进行统计,并将结果输出(一)
2016-06-14 16:57
344 查看
待解析的文件:race_dc_2016-05-26
文件大小70W行,其中文件中部分数据如下:
[udpconnect
忘记自己 Udp_Connect 第0次连接成功 223.89.5.212016-05-26 00:00:24]
[udpconnect 忘记自己 Udp_Init_Stream 第0次init成功223.89.5.21
2016-05-26 00:00:24]
[udpconnect
就这样算了吧 Udp_Connect 第0次连接成功 14.124.146.1562016-05-26 00:00:23]
[udpconnect 就这样算了吧 Udp_Init_Stream 第0次init成功14.124.146.156
2016-05-26 00:00:24]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_10.am125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_7.am125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_3.am125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/skybox/skybox_5.cubeatf125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_6.am125.82.186.0
2016-05-26 00:14:56]
[udptotcp 冬青丘比ㅛ Udp转tcp1.27.223.240
2016-05-26 06:00:07]
[udptotcp gjyyhfhtdfcghf Udp转tcp106.39.195.174
2016-05-26 06:00:11]
........................................................................................................等等各种数据类型
一、目标:
解析这种日志:
1)loadFile
[loadFile夏调ツload资源失败
url:a/car/car/car1000401/carwheelf1000401.mesh 183.198.xxx.159 2016-06-01 00:07:21]
数据分别是:
昵称 夏调ツ
相关url load资源失败
url:avatar/car/car/car1000401/caxxxeelf1000401.mesh
IP 183.198.xxx.159
统计 :加载文件失败的用户数
每个加载失败文件的次数
加载文件失败的IP
2)udpconnect
[udpconnect ㅗ楚天 Udp_Connect 第0次连接成功 219.139.48.64 2016-06-0100:08:51]
[udpconnect 動情ю udp连接失败 reason:Unknow。 27.38.38.226 2016-06-01 00:09:22]
数据:
昵称 ㅗ楚天
描述 Udp_Connect 第0次连接成功
统计:udp连接成功以及udp连接失败的次数
udp连接失败的IP
其中每行数据中的空格,有的为“/t”,有的为空格,需要解析看看
-----------------------------------------------------------------------------------------------------------------------------
二、思路
1、对于文件的处理,其流程为:输入——处理——输出,将文件去掉/t解析成一行一行的:如
[udpconnect ㅗ楚天 Udp_Connect 第0次连接成功 219.139.48.64 2016-06-0100:08:51] 解析去掉/t之后,得到
[udpconnect
ㅗ楚天 Udp_Connect 第0次连接成功
219.139.48.64
2016-06-0100:08:51]
存放在String字符串中为{[udpconnect,ㅗ楚天 Udp_Connect 第0次连接成功,219.139.48.64,2016-06-0100:08:51] },表明ㅗ楚天 Udp_Connect 第0次连接成功中间有两个空格;
2、对于要处理的数据类型可以抽象为bean类:loadFile类、udpConnect类
3、设置dao类loadFileHandler来处理关键字为loadFile的数据,对应1中处理——输出流程;
设置dao类udpConnectHandler来处理关键字为udpconnect的数据,对应1中的处理——输出流程
4、设置dao类AllHandler来处理文件流的输入,对应1中输入流程
5、对于3中的类,处理流程都一样,因此抽象出一个接口:输入——输出接口,虽然T在本程序为String[]但为了扩展性还是改成泛型T
总结:AllHandler类获得文件流,进行遍历每一行数据,将符合关键字的每一行数据,交给对应的处理器loadFileHandler、udpConnectHandler处理,
最后文件被遍历完了,AllHandler类控制总体的结果输出。其中,为了增加程序的灵活性,采用了配置文件config.xml,其作用如下:
比如在config.xml文件如下:则表明,现在关键词loadFile对应的处理类为LoadFileHandler,以后要扩展不同的关键词,只需要(1)配置config.xml文件(2)添加对应处理类
下一节,将开始讲如何用代码实现单线程读取文件,实现代码的精简化和良好的扩展性,
其中关于xml解析的知识,见
http://blog.csdn.net/tardis1/article/details/51672801
http://blog.csdn.net/tardis1/article/details/51672687
文件大小70W行,其中文件中部分数据如下:
[udpconnect
忘记自己 Udp_Connect 第0次连接成功 223.89.5.212016-05-26 00:00:24]
[udpconnect 忘记自己 Udp_Init_Stream 第0次init成功223.89.5.21
2016-05-26 00:00:24]
[udpconnect
就这样算了吧 Udp_Connect 第0次连接成功 14.124.146.1562016-05-26 00:00:23]
[udpconnect 就这样算了吧 Udp_Init_Stream 第0次init成功14.124.146.156
2016-05-26 00:00:24]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_10.am125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_7.am125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_3.am125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/skybox/skybox_5.cubeatf125.82.186.0
2016-05-26 00:14:56]
[loadFile 宇宙第一车神 load资源失败 url:scene/material/Material_1005_6.am125.82.186.0
2016-05-26 00:14:56]
[udptotcp 冬青丘比ㅛ Udp转tcp1.27.223.240
2016-05-26 06:00:07]
[udptotcp gjyyhfhtdfcghf Udp转tcp106.39.195.174
2016-05-26 06:00:11]
........................................................................................................等等各种数据类型
一、目标:
解析这种日志:
1)loadFile
[loadFile夏调ツload资源失败
url:a/car/car/car1000401/carwheelf1000401.mesh 183.198.xxx.159 2016-06-01 00:07:21]
数据分别是:
昵称 夏调ツ
相关url load资源失败
url:avatar/car/car/car1000401/caxxxeelf1000401.mesh
IP 183.198.xxx.159
统计 :加载文件失败的用户数
每个加载失败文件的次数
加载文件失败的IP
2)udpconnect
[udpconnect ㅗ楚天 Udp_Connect 第0次连接成功 219.139.48.64 2016-06-0100:08:51]
[udpconnect 動情ю udp连接失败 reason:Unknow。 27.38.38.226 2016-06-01 00:09:22]
数据:
昵称 ㅗ楚天
描述 Udp_Connect 第0次连接成功
统计:udp连接成功以及udp连接失败的次数
udp连接失败的IP
其中每行数据中的空格,有的为“/t”,有的为空格,需要解析看看
-----------------------------------------------------------------------------------------------------------------------------
二、思路
1、对于文件的处理,其流程为:输入——处理——输出,将文件去掉/t解析成一行一行的:如
[udpconnect ㅗ楚天 Udp_Connect 第0次连接成功 219.139.48.64 2016-06-0100:08:51] 解析去掉/t之后,得到
[udpconnect
ㅗ楚天 Udp_Connect 第0次连接成功
219.139.48.64
2016-06-0100:08:51]
存放在String字符串中为{[udpconnect,ㅗ楚天 Udp_Connect 第0次连接成功,219.139.48.64,2016-06-0100:08:51] },表明ㅗ楚天 Udp_Connect 第0次连接成功中间有两个空格;
2、对于要处理的数据类型可以抽象为bean类:loadFile类、udpConnect类
3、设置dao类loadFileHandler来处理关键字为loadFile的数据,对应1中处理——输出流程;
设置dao类udpConnectHandler来处理关键字为udpconnect的数据,对应1中的处理——输出流程
4、设置dao类AllHandler来处理文件流的输入,对应1中输入流程
5、对于3中的类,处理流程都一样,因此抽象出一个接口:输入——输出接口,虽然T在本程序为String[]但为了扩展性还是改成泛型T
<span style="font-size:18px;">public interface StatHandler<T> { /** * 输出结果 */ public void output(); /** * 输入一行数据 * @param t */ public void input(T t); }</span>
总结:AllHandler类获得文件流,进行遍历每一行数据,将符合关键字的每一行数据,交给对应的处理器loadFileHandler、udpConnectHandler处理,
最后文件被遍历完了,AllHandler类控制总体的结果输出。其中,为了增加程序的灵活性,采用了配置文件config.xml,其作用如下:
比如在config.xml文件如下:则表明,现在关键词loadFile对应的处理类为LoadFileHandler,以后要扩展不同的关键词,只需要(1)配置config.xml文件(2)添加对应处理类
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?> <SetObject> <yourKey name="[loadFile" value="com.zsj.test.daos.LoadFileStatHandler" /> <yourKey name="[udptotcp" value="com.zsj.test.daos.UdpToUpdStatHandler" /> <yourKey name="[udpconnect" value="com.zsj.test.daos.UdpconnectStatHandler" /> </SetObject></span>
下一节,将开始讲如何用代码实现单线程读取文件,实现代码的精简化和良好的扩展性,
其中关于xml解析的知识,见
http://blog.csdn.net/tardis1/article/details/51672801
http://blog.csdn.net/tardis1/article/details/51672687
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树