2012年12月15日 星期六

作業練習-讀取log

課程作業:撈取log檔中的IP

import java.io.*;
import java.net.*;
import java.util.*;

public class  myLog01{
    public static void main(String[] args) throws IOException{
        URL fileURL = myLog01.class.getResource("/wiki.myruby.net-May-2012");
        FileReader fileReader = new FileReader(fileURL.getFile());
        BufferedReader bReader = new BufferedReader(fileReader);
       
   
        String y;
        int x=0;
        while((y = bReader.readLine()) != null ){
            ++x;
        }
        System.out.println("此文件總共"+x+"個IP");

//用來逐行讀取,先求出ip總數(含重複)
       
        String[] t;
        String[] ip=new String[x];
        int i=0;
       
        FileReader f1=new FileReader(fileURL.getFile());
        BufferedReader b1 =new BufferedReader(f1);
        while((y = b1.readLine()) != null ) {
               t=y.split(" ");
               ip[i]=t[0];
               ++i;
        }
//再從頭讀取一次,然後用空格做分割,再取出第一個位置的值直接放到ip陣列內

        Arrays.sort(ip);
//把ip按照順序排列一次

        int s=0;
        int m = 0;
        int j;
        for(j=0; j<x-1 ; j++) {
            if(ip[j].equals(ip[j+1])!=true){
                s=j-s;
                System.out.println(ip[j]+" 造訪 "+s+" 次");
                s=j;
                m++;
            }       
        }
        System.out.println(m+"個ip造訪");
    }
}
//把陣列ip值做比較,後一個等於前一個的時候就做累計,用來求出同個ip有幾次的造訪
//最後再統計扣掉重複以後,總共是幾個ip造訪

檔案 wiki.myruby.net-May-2012 內容大概都像下面這樣

1.202.218.8 - - [30/Apr/2012:07:04:47 -0600] "GET /robots.txt HTTP/1.0" 404 2554 "-" "\"Mozilla/5.0"

最後運算的結果如下(取一行)

1.202.218.8 造訪 206 次

 這個程式是用來練習撈取ip記錄檔,像大型網站要看有多少訪客的時候就可能用上這樣的程式撈資料


沒有留言:

張貼留言