面试题:有一份1000万行,大小为100GB的日志文件,每行只有两列数据,第一列是文件字节数,第二列是文件名,单击硬件配置为4C4G,如何设计一个程序统计文件大小的分布情况,例如1G以上的文件个数

题目:

有一份1000万行,大小为100GB的日志文件,每行只有两列数据,第一列是文件字节数,第二列是文件名,单击硬件配置为4C4G,如何设计一个程序统计文件大小的分布情况,例如1G以上的文件个数,1KB一下的文件字数,写出思路即可。

答案:

public class Test {
    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader("F:\\abc.txt"));
            String text = null;
            Map<String, Integer> map = new HashMap<>();
            // 记录小于1KB的文件数目
            map.put("小于1KB", 0);
            // 记录大于1GB的文件数目
            map.put("大于1GB", 0);
            // 记录大于等于1KB小于1GB的文件数目
            map.put("大于等于1KB小于1GB", 0);
            // 一行一行的读取
            while ((text = reader.readLine()) != null) {
                // \\s+代表一个或者多个空格
                String[] s = text.split("\\s+");
                // 如果字节数小于1024,那说明小于1KB;如果字节数大于1024*1024*1024=1073741824的话,那说明大于1GB;剩余的就是他们之间的文件了;分别让对应的value加1
                if (Long.parseLong(s[0]) < 1024l) {
                    map.put("小于1KB", map.get("小于1KB") + 1);
                } else if (Long.parseLong(s[0]) > 1073741824l) {
                    map.put("大于1GB", map.get("大于1GB") + 1);
                } else {
                    map.put("大于等于1KB小于1GB", map.get("大于等于1KB小于1GB") + 1);
                }
            }
            // 打印key和value
            Set<Map.Entry<String, Integer>> entries = map.entrySet();
            for (Map.Entry<String, Integer> entry : entries) {
                System.out.println(entry.getKey() + ":" + entry.getValue() + "个");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

结果:

小于1KB:2个
大于1GB:2个
大于等于1KB小于1GB:1

测试文件:

abc.txt:

100  a.txt
120 b.txt
1025   c.txt
1073741826   d.txt
1073741827   e.txt
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读