java 读取txt文件,一列日期(8位,如20160524),一列数值,将相同日期的数值求和并打印

java 读取txt文件,一列日期(8位,如20160524),一列数值,将相同日期的数值求和并打印

问题描述:

图片说明

求前辈帮忙写下

public static void countDate(String filePath) {
Map<String, Integer> map = new HashMap<String, Integer>();
FileInputStream in = null;
try {
//filepath为文件路径
in = new FileInputStream(filePath);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while(true) {
//按行读取
String str = br.readLine();
if (str == null) break;
if ((str = str.trim()).length() == 0) continue;
Integer v = map.get(str);
v = v == null ? 1 : v.intValue() + 1;
map.put(str, v);
}
Iterator<String> iterator = map.keySet().iterator();
while(iterator.hasNext()) {
String key = iterator.next();
System.out.println("date="+key+",totalCount="+map.get(key));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

首先需要知道文件有多大,确认虚拟机内存能否一次性读入。
如果能,直接运用
BufferedReader + HashMap<String, Integer>
最终输出就可以。

若果文件太大,虚拟机不能一次读入,可以先hash文件,分成小文件再进行分别读取和输出。

这里只提供了思路,但如果有帮助,希望结帖