Java 按照顺序读取文件夹下所有文件

1:问题场景

01:提取某个包下边的.class文件的hash值(文件hash提取不再赘述)

02:文件在我本地,以及两台测试服务器上的读取顺是一致的,我就没有去在意,但是在项目现场出现文件读取不一致情况

03:解决思路,将文件路径都存入list中,再对list进行排序

2:代码

public static String getHash(String pack) throws Exception { //入口
        //重置code码
        code = "";
        String codelist = "";
        listCode = new ArrayList<String>();
        String packageName = pack;
        String packageDirName = packageName.replace('.', '/');
        try {
            Enumeration<URL> dirs = Thread.currentThread()
                    .getContextClassLoader().getResources(packageDirName);
            // 循环迭代下去
            while (dirs.hasMoreElements()) {
                // 获取下一个元素
                URL url = dirs.nextElement();
                // 得到协议的名称
                // String protocol = url.getProtocol();
                // 获取包的物理路径
                String filePath = URLDecoder.decode(url.getFile(), "UTF-8");
                toHash(filePath);
                Object[] array = hashList.toArray();
                Arrays.sort(array);
                toHashList(array);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        for(String codes : listCode) {
            codelist += codes;
        }
        return codelist;
    }
    
    private static void toHashList(Object[] array) throws Exception{

        for(Object str : array) {
            String strfile = (String)str;
            File file = new File(strfile);
            if (file.isFile() && file.getName().lastIndexOf(".class") != -1) {
                HashMethod hm = new HashMethod();
                String hash = hm.getHash(file.toString());
                // 取每个.class文件的hashCode的后5位进行拼接
                hash = hash.substring(hash.length() - 5);
                listCode.add(hash);
            }
        }
    }
    private static void toHash(String filePath) throws Exception { //文件夹层级不深,采用递归,文件夹深的话不要递归容易读死
        File[] listFiles = new File(filePath).listFiles();
        for (File file : listFiles) {
            if(file.isDirectory()) {
                toHash(file.toString());
            }else {
                hashList.add(file.toString());
            }
        }

    }

敬请留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值