题5

来源:互联网 发布:淘宝免单活动在哪里看 编辑:程序博客网 时间:2024/06/08 16:52

题目描述:有两个文件,文件每一行是一个访问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();            }        }    }}