A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import org.apache.commons.io.FilenameUtils;

/*
*需求:获取一个目录下所有文件的后缀名,计算共有多少后缀名,并获取每种后缀名含有多少个文件
*分析:1.遍历目录获取所有文件
*/
public class Demo02 {
        private static ArrayList<String> list = new ArrayList<>();
        private static Map<String,Integer> map = new HashMap<>();
        public static void main(String[] args) {
                //选择根目录
                File root = new File("D:\\daima\\day01");
                //使用递归遍历目录,获得所有文件的后缀名,并用字符串接收
                //listFile(root);
                //将遍历的文件后缀名添加到集合中
                 list =getList(root);
                System.out.println(list.get(5));
               
                //传入一个字符串,生成一个map集合
                 map = getMap(list);
                //System.out.println(map);
                //遍历map集合打印元素
                listMap(map);
               
               
        }

        private static void listMap(Map<String, Integer> map) {
                // TODO Auto-generated method stub
                Set<String> keys = map.keySet();
                for(String k:keys){
                        System.out.println("k="+k+"\t"+"v="+"("+map.get(k)+")");
                }
        }

        private static Map<String, Integer> getMap(ArrayList<String> list) {
                int a =0;
                if(list != null){
                        for(int x=0;x<list.size();x++){
                                for(int y=0;y<list.size();y++){
                                        if(list.get(x)== list.get(y)){
                                                a++;
                                        }
                                }
                                //
                                if(!map.containsKey(list.get(x))){
                                        map.put(list.get(x), a);
                                }
                        }
                }
                //System.out.println(map);
                return map;
        }

        private static ArrayList<String> getList(File dir) {
                //获取目录下所有文件的File数组
                File[] fileArray =dir.listFiles();
                //遍历目录
                if(fileArray != null){
                        for(File f:fileArray){
                                if(f.isFile()){
                                        String s=FilenameUtils.getExtension(f.toString());
                                        //System.out.println(s);
                                        list.add(s);
                                }else if(f.isDirectory()){
                                        getList(f);
                                }
                        }
                }
                //System.out.println(list);
                return list;
        }

        /*private static void listFile(File dir) {
                //获取目录下所有文件的File数组
                File[] fileArray =dir.listFiles() ;
                //遍历目录
                if(fileArray != null){
                        for(File f:fileArray){
                                if(f.isFile()){
                                        String s=FilenameUtils.getExtension(f.toString());
                                        //System.out.println(s);
                                       
                                }else if(f.isDirectory()){
                                        listFile(f);
                                }
                        }
                }
        }*/
}
       


5 个回复

倒序浏览

回帖奖励 +2

刘明观察
回复 使用道具 举报
看的我头晕晕的......
回复 使用道具 举报
for(int x=0;x<list.size();x++){                                 for(int y=0;y<list.size();y++){                                         if(list.get(x)== list.get(y)){                                                 a++;这个地方有问题  两个的遍历都是从0开始的  这样就会出现多加的情况  你可以只用一次for   然判断map中是否包含  包含就在原值的基础上+1   不包含就重新存储。for嵌套  要保证i<j,
回复 使用道具 举报
来学习一下
回复 使用道具 举报

今天已经解决。还有要用equals()方法判断才行,==比较的是地址。另外获取文件后缀名也可以用Sustring()和lastIndexof()方法组合。for循环的嵌套这里没问题的。就是为了找到含有相同后缀名的文件并进行累加,自然得都比较一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马