找出某一天的日志文件中访问量排行前10的服务

需求分析
1.日志文件比较大,所以考虑用流来读取,使用转换流,一次一行
2.文件读取的时候,我们需要对读取到的每一行文件进行截取,获取我们需要的url的后半部分内容
将其存入list集合
3.计算list集合中某一元素的出现次数,并且将该元素作为key,其出现此处作为value存入Map集合中
(Map集合的key具有唯一属性,可以去重复,当然放入set集合也是一样的道理)
4.对Map集合按照value进行排序
6.获取集合中前十个数据即可

分析完毕,直接上代码。
鉴于,这样的日志文件,当前不存在,我自己用流写了一个文件

//文件写入  
	private static void  writerFile() throws Exception {
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File("E:\\aa.txt")));
		int count = 0;
		System.out.println(1);
		while(count<=1000) {
			for (int i = 0; i < 100; i++) {
				bw.write("aa bb cc/h"+i);
				bw.newLine();
				bw.flush();
				System.out.println(count);
				count++;
			}				
		}
		bw.close();
	}

文件在指定位置写好之后,我们需要对文件中的部分内容进行修改,以达到更加直观的展示。
方法很简单,双击打开文件,删除一部分文件内容,同时对某一条或者几条数据进行复制即可。
读取文件,并且切割,转换成list集合

//文件内容读取封装
	private static List readFile(File file) throws Exception{
		BufferedReader br = new BufferedReader(new FileReader(file));
		String str;
		List list = new ArrayList();
		while((str=br.readLine())!=null) {
			String[] split = str.split("cc/");
              list.add(split[1]); 			
		}
		br.close();
		return list;	
	}

具体实现如下

		//writerFile();
			File file = new File("E:\\aa.txt");
		     List rf = readFile(file);
		     //若将list集合放入set集合去重复 ,则下方遍历的是set集合
		  
		     
		      Map map = new HashMap();
		    //计算出现次数
	             for (String s : rf) {
	            	 //计算某一元素出现的次数
					 map.put(s, Collections.frequency(rf, s));
				}
	             //集合工具类通过value排序的使用
	           List> list = new ArrayList>(map.entrySet());
	             Collections.sort(list, new Comparator>() {

					@Override
					public int compare(Entry a, Entry b) {
						//比较降序排序,若升序则ab位置互换即可
						return b.getValue().compareTo(a.getValue()) ;
					}
				});
				//至此list集合已经遍历好
	             //获取访问量前10的即,遍历map,只获取顺序遍历的前十个集合元素
	             for (int i = 0; i < 10; ) {
					Entry entry = list.get(i);
					i=i+1;
					System.out.print("第"+i+"访问量的url为");
					System.out.println("aa bb cc/"+entry.getKey()+"     "+entry.getValue());
				}

效果如图:
找出某一天的日志文件中访问量排行前10的服务_第1张图片

你可能感兴趣的:(文件流+集合)