📄 loganalyzer.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 + -