본문 바로가기
Java 문제

[Java] HTTP Access 로그 분석

by 두리두리안 2021. 5. 7.

첨부된 "access.log" 파일을 읽어

요구사항에 알맞은 IP Hit수를 출력하시오.

 

요구 사항

1. 접근 URL "/login.do" 일 것

2. HTTP상태코드가 "200" 일 것

 

package Test03;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class logCheck {
    public static void main(String[] args) {
        List<String> logList = fileCheckMethod();
        outPutMethod(logList);

    }

    public static List<String> fileCheckMethod() {
        List<String> repCheck = new ArrayList<>();
        // 原코드에는 try문 內에 있었지만 return을 하기 위해서 try문 밖으로 이동 하였다.
        // try문 內에 있으면 return시 없는것을 return 하라는것으로 이해한다.
        try {
            //파일 입출력
            File file = new File("C:\\Users\\최민준\\Downloads\\21년 코딩테스트 자료\\accessLog\\access.log");
            //입력 스트림 생성
            FileReader filereader = new FileReader(file);
            //입력 버퍼 생성하기
            BufferedReader bufReader = new BufferedReader(filereader);
            String line = "";
            Map<String, Integer> usemap = new HashMap<>();
            // Integer,String형 map 선언
            while ((line = bufReader.readLine()) != null) {
                String s1 = line;
                String[] s2 = s1.split(" ");

                for (int i = 0; i < s2.length; i++) {
                    if (s2[i].equals("/login.do")) {
                        if ((i + 1) < s2.length && s2[i + 1].equals("200")) {
                            repCheck.add(s2[0]);
                        }
                    }
                }
            }
            bufReader.close();
        } catch (FileNotFoundException e) {
            System.out.println("파일을 찾을수 없습니다");
        } catch (IOException e) {
            System.out.println(e);
        }
        return repCheck;
    }

    public static void outPutMethod(List<String> repCheck) {
        List<String> outPutCheck;
        outPutCheck = repCheck;
        Map<String, Integer> usemap = new HashMap<>();


        if ( outPutCheck != null) {
            // 예외처리 부분  - null 아닐시
            for (int j = 0; j < outPutCheck.size(); j++) {
                if (usemap.containsKey(outPutCheck.get(j))) { // HashMap 내부에 이미 key 값이 존재하는지 확인
                    usemap.put(outPutCheck.get(j), usemap.get(outPutCheck.get(j)) + 1);  // key가 이미 있다면 value에 +1
                } else { // key값이 존재하지 않으면
                    usemap.put(outPutCheck.get(j), 1); // key 값을 생성후 value를 1로 초기화
                }
            }

            for (String key : usemap.keySet()) {
                System.out.println(key + "(" + usemap.get(key) + ")");
                System.out.println("*********************************");
            }
        }
    }
}