Как создать и заполнить hashmap из файла access.log

Есть файл access.log, расположен он на C:\java и имеет структуру время_длина запроса_ip-адрес_код/статус_байты данных_метод_URL_пользователь_источник_тип где '_'- пробел. Как заполнить HashMap?

Пример записи в файле acces.log:

1360425902.620      2 192.168.50.8 TCP_DENIED/403 3867 CONNECT gstat.imgsmail.ru:443 - HIER_NONE/- text/html

Ответы (1 шт):

Автор решения: Алексей Ковальчук
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

public class Debug2 {

    public static void main(String[] args) throws Exception {
        File file = new File("C:\\java\\access.log");

        Map<String, String> map = new HashMap<>();

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] data = line.split("\\s+");
                String time = data[0];
                String ip = data[2];
                String url = data[8];
                // получаем другие данные по индексу в том порядке, в каком они идут в логах

                map.put(ip, url); // заполняем map, подставляем значения, какие хотим в ключ и значение
            }
        }

        System.out.println(map);
    }
}


Пример с своим классом IpData:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

public class Debug2 {

    public static void main(String[] args) throws Exception {
        File file = new File("C:\\java\\access.log");

        Map<String, IpData> map = new HashMap<>();

        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = br.readLine()) != null) {
                String[] data = line.split("\\s+");
                String time = data[0];
                String ip = data[2];
                String url = data[8];
                // получаем другие данные по индексу в том порядке, в каком они идут в логах

                // создаем объект своего класса, в который сохраняем все данные, связанные с ip
                IpData ipData = new IpData();
                ipData.time = time;
                ipData.url = url;

                map.put(ip, ipData); // заполняем map, подставляем значения, какие хотим в ключ и значение
            }
        }

        System.out.println(map);
    }

    static class IpData {
        String time;
        String url;
    }
}
→ Ссылка