题目描述:有两个文件,文件每一行是一个访问IP,请将两个文件合并成一个文件,新文件中每一行有两个字段:IP和IP出现的总次数,并按IP的出现的总次数降序排序。
例:
文件a:
100.1.2.3
200.1.2.3
192.168.0.1
…
文件b:
200.1.2.3
192.168.0.1
192.168.0.1
合并后得到的新文件c:
192.168.0.1 3
200.1.2.3 2
100.1.2.3 1
代码:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
String patha="C://a.txt";
String pathb="C://b.txt";
HashMap<String,Integer> map=new HashMap<>();
getMap(patha,map);
getMap(pathb,map);
List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
StringBuffer sb=new StringBuffer();
for(Map.Entry<String,Integer> e:list){
System.out.println(e.getKey()+"----->"+e.getValue());
sb.append(e.getKey()+" "+e.getValue()+"\r\n");
}
try {
FileWriter writer=new FileWriter("C://c.txt");
BufferedWriter bw=new BufferedWriter(writer);
bw.write(sb.toString());
bw.close();
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getMap(String path,Map<String,Integer> map){
BufferedReader br=null;
try {
InputStream is=new FileInputStream(path);
br=new BufferedReader(new InputStreamReader(is));
String line="";
while((line=br.readLine())!=null){
line=line.trim();
if(!map.containsKey(line)){
map.put(line,1);
}else map.put(line,map.get(line)+1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}