Java数据存入HashMap中键值不唯一是怎么回事??求大神指点

/**获取D:\\迅雷下载t目录下所有文件的后缀名,并统计后缀名对应的文件个数,将这些文件的后缀名和对应的文件个数进行拼接,并将拼接的结果写到data.txt中。data... /*
*
获取D:\\迅雷下载t目录下所有文件的后缀名,并统计后缀名对应的文件个数,将这些文件的后缀名和对应的文件个数进行拼接,并将拼接的结果写到data.txt中。
data.txt中数据的格式如下:xls:2; doc:1; mp3:7; docx:1; txt:4;

*/
public class Test {
public static void main(String[] args) throws IOException {

File f= new File("D:\\迅雷下载");
showFil(f);
}

private static void showFil(File f) throws IOException {
HashMap<String,Integer> map= new HashMap<String ,Integer>();
//获取D:\\迅雷下载中所有文件名
File[] lis = f.listFiles();
for (File file : lis) {
if(file.isDirectory()){
showFil(file);
}
else{
String str = file.getName();
int lastIndexOf = str.lastIndexOf('.');
String newStr = str.substring(lastIndexOf+1);
Integer v = map.get(newStr);
//把获取的文件名存入Map集合中
if(v==null){
map.put(newStr, 1);
}
else{
v++;
map.put(newStr, v);
}
}
}
//遍历Map集合并把键值对存入StringBuffer中
StringBuffer sb= new StringBuffer();
Set<String> keySet = map.keySet();
for (String key : keySet) {
sb.append(key+":"+map.get(key)+";\t");
}
//写入文件中
String string = sb.toString();
System.out.print(string);
BufferedWriter bw = new BufferedWriter(new FileWriter("data.txt"));
bw.write(string);

bw.flush();
bw.close();
}
}
//输出结果:jpg:12; db:1; jpg:11; db:1; png:9; css:1; jpg:12; db:1; txt:1; rmvb:1; txt:2;
//D:\\迅雷下载是多层目录
展开
 我来答
爬虫飘过
2017-01-31 · 超过59用户采纳过TA的回答
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:68.2万
展开全部
因为上面代码打印消息的时候,不是同一个map对象,每次递归调用showFil,都会重新new一个map对象。把HashMap<String,Integer> map= new HashMap<String ,Integer>();放到showFil方法外面,就是你想要实现的效果了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式