⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loganalyzer.java

📁 统计所有成功访问的站点。成功与否根据第四列的值进行判断
💻 JAVA
字号:
package forthExam;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

/**
 * 第四次上机考试--日志分析
 * 
 * @author HOLLY
 * 
 */
public class LogAnalyzer {
	/**
	 * 程序入口
	 * 
	 * @param args
	 * @throws IOException
	 */
	public static void main(String[] args) throws IOException {
		File logFile = new File("D:/access.log");
		LogAnalyzer analyzer = new LogAnalyzer();
		FileReader in = null;
		try {
			in = new FileReader(logFile);

			/**
			 * 第一问
			 */
			Set<String> hosts = analyzer.countSucessfulSites(in);
			for (String host : hosts) {
				System.out.println(host);
			}

			/**
			 * 第二问
			 */
			List<Map.Entry<String, Integer>> list = analyzer
					.countVisitNumber(in);
			for (Entry<String, Integer> entry : list) {
				System.out.println(entry.getKey() + "   " + entry.getValue());
			}

		} finally {
			if (in != null) {
				in.close();
			}
		}
	}

	/**
	 * 返回一个Set,包括所有访问成功的站点名
	 * 
	 * @param reader
	 * @return
	 * @throws IOException
	 */
	private Set<String> countSucessfulSites(Reader reader) throws IOException {
		String line;
		BufferedReader in = new BufferedReader(reader);
		Set<String> countSet = new HashSet<String>();
		while ((line = in.readLine()) != null) {
			if ((line.indexOf("TCP_DENIED/302")) == -1) {
				String siteName = line.substring(line.indexOf("//") + 2);
				countSet.add(siteName.substring(0, siteName.indexOf("/")));
			}
		}
		return countSet;
	}

	/**
	 * 按访问成功次数由多至少的顺序输出每个访问站点和相应的访问次数。
	 * 
	 * @param set
	 * @return
	 * @throws IOException
	 */
	private List<Map.Entry<String, Integer>> countVisitNumber(Reader reader)
			throws IOException {
		Map<String, Integer> map = initMap(reader);
		Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
		List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(
				entrySet);
		/**
		 * 用匿名内部类创建一个比较器
		 */
		Comparator<Map.Entry<String, Integer>> compare = new Comparator<Map.Entry<String, Integer>>() {

			public int compare(Entry<String, Integer> entryOne,
					Entry<String, Integer> entryTwo) {
				return entryTwo.getValue() - entryOne.getValue();
			}
		};
		Collections.sort(list, compare);
		return list;
	}

	/**
	 * 将访问成功的站点放入到map中
	 * 
	 * @param reader
	 * @return
	 * @throws IOException
	 */
	private Map<String, Integer> initMap(Reader reader) throws IOException {
		String line;
		BufferedReader in = new BufferedReader(reader);
		Map<String, Integer> map = new HashMap<String, Integer>();

		while ((line = in.readLine()) != null) {
			if ((line.indexOf("TCP_DENIED/302")) == -1) {
				String siteName = line.substring(line.indexOf("//") + 2);
				String site = siteName.substring(0, siteName.indexOf("/"));
				if (map.containsKey(site)) {
					map.put(site, 1);
				} else {
					map.put(site, map.get(site) + 1);
				}
			}
		}
		return map;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -