杰普(briup)软件公司JAVA培训项目《电信宽带运营支撑系统(WOSS)》------采集模块

1. 功能

       采集原始计费Log(radwtmp)文件,整理成WOSS类数据清单

2.原始数据

       用户名、NASIP、上下线标识、TimeStamp、用户IP#briup1457|037:wKgB1457A|7|1239108870|104.66.128.6#|037:wKgB7822A|8|1239610552|38.72.174.112#briup9683|037:wKgB9683A|7|1239191130|215.238.25.124#briup4367|037:wKgB4367A|7|1239137970|186.106.245.123#briup4950|037:wKgB4950A|7|1239143800|6.157.134.168#briup5608|037:wKgB5608A|7|1239150380|137.239.38.56#briup4486|037:wKgB4486A|7|1239139160|65.150.6.53#briup7397|037:wKgB7397A|7|1239168270|127.176.46.85#briup9064|037:wKgB9064A|7|1239184940|133.32.176.98#briup7585|037:wKgB7585A|7|1239170150|19.147.112.98#|037:wKgB9683A|8|1239733378|215.238.25.124#|037:wKgB4950A|8|1239421000|6.157.134.168......................................................

3. 思考

(1)当前分析的数据中标识为“7”的时候,该数据中是不含下线时间、在线时长,应如何将该数据的每个属性保存至Woss类对象中?
(2)当前分析的数据标识为“8”的时候,该数据包含下线时间,怎样和之前的上线时间进行匹配得到在线时长?

4.代码如下

(1)WOSS类

package com.briup.woss.bean;import java.io.Serializable;public class Woss implements Serializable{private String userName;private String nasIP;private Long startTime;private Long endTime;private Long duration;private String userIP;public String getUserName(){return userName;}public void setUserName(String userName){this.userName=userName;}public String getNasIP(){return nasIP;}public void setNasIP(String nasIP){this.nasIP=nasIP;}public Long getStartTime(){return startTime;}public void setStartTime(Long startTime){this.startTime=startTime;}public Long getEndTime(){return endTime;}public void setEndTime(Long endTime){this.endTime=endTime;}public Long getDuration(){return duration;}public void setDuration(Long duration){this.duration=duration;}public String getUserIP(){return userIP;}public void setUserIP(String userIP){this.userIP=userIP;}}

(2)RawFileParse类(采集原始数据)

package com.briup.woss.client;import com.briup.woss.bean.Woss;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class RawFileParse{// 将文件路径以参数的形式提供// 使得程序具有通用性public List<Woss> parse(String path) throws IOException, ClassNotFoundException{// 读取文件中的每一行数据// 用Java中的类表示实际的物理意义上的文件File file=new File(path);// 由于该文件中的内容是文本内容// 所以采用字符流读取比较方便// 使用字节流读取原始文件FileInputStream fis=new FileInputStream(file);// 使用桥流进行转化InputStreamReader isr=new InputStreamReader(fis);// 使用字符流接受桥流转化之后的数据BufferedReader br=new BufferedReader(isr);// 简便方法// BufferedReader reader=new BufferedReader(new FileReader(file));// 从字符流中获取数据并且打印// 定义String类型的变量,用于表示// 一行数据// 定义Map集合,Key是UserIP,// Value是Woss对象Map<String,Woss> map=new HashMap<String, Woss>();// 创建List集合,用于保存// 所有属性都完整的Woss对象List<Woss> list=new ArrayList<Woss>();String line;while((line=br.readLine())!=null){// System.out.println(line);// 对文件的每一行以“|”进行分割String[] strs=line.split("[|]");// 分割之后的结果是字符串数组,// 一共有5项,用户名、NASIP、// 标识、上下线时间戳、用户IP// 创建Woss对象,将分割之后的每一项// 赋值给Woss对象的相关属性Woss woss;   // 变量的声明if("7".equals(strs[2])){// 变量的定义=声明+初始化woss=new Woss(); // 变量的初始化woss.setUserName(strs[0]);woss.setNasIP(strs[1]);Long st=Long.parseLong(strs[3]);woss.setStartTime(st);woss.setUserIP(strs[4]);// 由于还需要对该对象进行比对匹配,// 所以使用Map集合将该对象进行保存map.put(strs[4],woss);}if("8".equals(strs[2])){// 当标识为8的时候,先从Map集合中// 找到与之相对应的Woss对象,// 将该行数据中的下线时间和在线时长// 保存至对应的woss对象中// 通常情况下,有8肯定有7与之对象if(map.containsKey(strs[4])){// 通过UserIP在Map集合中获取到// woss对象Woss wossFromMap=map.get(strs[4]);Long et=Long.parseLong(strs[3]);wossFromMap.setEndTime(et);// 计算在线时长:下线时间戳-上线时间戳Long dt=et-wossFromMap.getStartTime();wossFromMap.setDuration(dt);list.add(wossFromMap);// 将完整的Woss对象存放至List集合之后// 移除Map中的不完整的Woss对象map.remove(strs[4]);}}}// 当while循环结束之后,整个数据的处理也就// 完成了,完整的Woss对象被存储至List集合// 中,不完整的Woss对象呗保存至Map集合中// for(int x=0;x<10;x++){//     System.out.println(list.get(x));// }// System.out.println("-----------");// 设置计数器,只需要取Map中的10个元素// int index=0;// 将Map集合的所有Key存储至Set集合中// Set<String> keys=map.keySet();// 由于Set集合的特殊性,不能通过取其索引// 的形式来遍历该Set集合,只能通过创建// 迭代器的形式来遍历。// Iterator<String> it=keys.iterator();// 先使用迭代器对象调用hasNext方法判断是否有// 下一个元素,如果有则为true,并且判断计数器的// 值是否小于10,如果都成立,则执行while的循环体// while(it.hasNext()&&index++<10){// 通过迭代器的next方法获取到key// String key=it.next();// 通过map的get方法和获取到的key获取到value// Woss woss=map.get(key);// System.out.println(woss);// }// Map集合遍历的简单形式,// 使用JDK8中的Lambda表达式// 匿名内部类对于局部变量的访问// int x[]=new int[1];// map.forEach((k,v)->{//     if(x[0]++<10){//         System.out.println(v);//     }// });return list;}
}

至此,这个项目的采集模块就结束了。如需要整个项目的源码(包含采集,备份,入库,网络、日志、配置等各个模块)请留下邮箱。

杰普(briup)软件公司JAVA培训项目《电信宽带运营支撑系统(WOSS)》相关推荐

  1. 北京领航致远,立志打造业界最有深度最有特色的Java培训项目

    北京领航致远,立志打造业界最有深度最有特色的Java培训项目 前言 Java无疑是现在以及可预见的将来最热门的软件开发技术,随便在任何一个求职网站(比如51job.chinahr等等)搜索关键字:ja ...

  2. 武汉赛思软件公司 Java实习岗面经

    本人是21届毕业生,大学是双非,菜鸟一枚,想暑假找个实习,在5月份的开始准备面试,可惜没有注重算法,倒在了机试上.重要的事情说三遍,算法,算法,算法. 面试流程 笔试(2小时)--初试(人事)--机试 ...

  3. 税友软件公司java面试_税友集团java面试题

    答案 一 选择题 1  D   , 2 AD  ,   3 C   ,  4 AB  , 5 AG 6 A   , 7 C ,       8 ABC ,  9 A , 14 A , 15 CB , ...

  4. 普元软件EOS荣膺2008最受欢迎SOA产品

    2009年1月6日,中国计算机用户协会和中国互联网协会共同发布<2008年度中国IT网络调查研究报告>,报告显示在"2008最受欢迎SOA产品"评选中,普元软件EOS产 ...

  5. 从软件公司的异同点讲起,聊聊未来的程序员该如何选公司和谋规划

    过了年以后,新的一轮春招又要开始,于是一个迫切的问题就摆在广大计算机相关专业的毕业生面前,那就是,找工作时该如何挑选公司?该如何避坑? 在本文里,作者就将以一个有多年校招经验的IT技术面试官的身份,和 ...

  6. Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW)

    Java毕设项目电力公司员工安全培训系统计算机(附源码+系统+数据库+LW) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行) ...

  7. Java毕设项目电力公司员工安全培训系统(java+VUE+Mybatis+Maven+Mysql)

    Java毕设项目电力公司员工安全培训系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX ...

  8. 基于个月的培训项目中的Java,NET,PHP的德里

    基于个月的培训项目中的Java,NET,PHP的德里 关于DUCC系统(P)有限公司 我们是总部设在新德里的IT服务,软件开发和培训公司. DUCC系统列兵.公司已根据我注册)1956年公司印度政府二 ...

  9. java培训分享:java软件开发可以用哪些软件?

    从事java相关工作的小伙伴应该都有一个习惯,那就是运用软件的方便来达到高效率工作,本期小编为大家介绍的java培训教程就是关于"java软件开发可以用哪些软件?"的内容,来看看下 ...

最新文章

  1. ubuntu12.04中sublime输入中文
  2. ES6对象(2):面向对象与类
  3. MySQL数据存储目录查找
  4. windows.h与winsock2.h的包含顺序
  5. C++细节系列(零):零散记录
  6. QT输入输出(四)之 QProcess
  7. theme vscode 护眼_vscode的颜色设置(护眼模式)
  8. 把Python项目打包成exe文件
  9. Linux系统基本操作(二)—设置本地光盘为yum源
  10. 当代博物馆中的3DGIS虚拟现实搭建
  11. SQL SERVER还原数据库时,如果C盘空间不足还原到其他盘的方法
  12. “21 天好习惯”第一期-7
  13. BeyondCompare去掉时间戳的匹配
  14. [vdbench]vdbench典型配置
  15. lagrange 插值实现和龙格现象
  16. 【学习笔记】C++ GUI Qt4 第三章 3.4 实现File菜单
  17. 新氧科技与京东健康签订合作协议 迎来医美服务高品质上飞跃
  18. 自动化测试unittest框架
  19. 条码标签打印软件如何重复打印流水号
  20. button按钮 去除基本样式

热门文章

  1. 黑马程序员---Java 容器集合
  2. 图灵奖得主Jack Dongarra:高性能计算与AI大融合,如何颠覆科学计算
  3. CSS设置背景图宽度100%,高度自适应
  4. 人工智能专业就业方向有哪些?
  5. 2021-05-02
  6. 六张图,看懂前瞻性数据分析,该如何做
  7. Scala与Java语言的差异
  8. FluentData
  9. PaddleRec与Milvus深度结合,手把手带你体验工业级推荐系统召回速度
  10. Linux基础面试篇