批量修改文件名

public class T {
    public static void main(String[] args) {
        reName("C:\\Users\\ThinkStation\\Desktop\\2021 年末\\12-20\\222",
                "kp_error_anim",  ".png");
    }

    static void reName(String dirPath, String prefix, String suffix){
        File dirFile = new File(dirPath);
        if (dirFile == null || dirFile.isFile() ||
                !dirFile.exists()){
            System.out.println("error");
            return;
        }

        String[] nameArr = dirFile.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                System.out.println("accept " + name);
                if (name.endsWith(suffix)){
                    return true;
                }
                return false;
            }
        });

        List<Test.FileInfo> fileInfoList = new ArrayList<>(nameArr.length);
        for(String name : nameArr){
            fileInfoList.add(new Test.FileInfo(name));
        }

        Collections.sort(fileInfoList);



        System.out.println("" + Arrays.toString(nameArr));
        for(int i=0; i<fileInfoList.size(); i++){
            String name = fileInfoList.get(i).name;

            File file = new File(dirFile + File.separator + name);

            String num = String.format("%02d", i);
            File newFile = new File(dirPath + File.separator + prefix + "_" + num + suffix);

            boolean flag = file.renameTo(newFile);

            System.out.println("rename " + flag);
        }
    }

    static class FileInfo implements Comparable<Test.FileInfo> {
        String name;
        int num;


        public FileInfo(String name){
            this.name = name;

            if (name.contains(".")) {
                String noSuffixName = name.substring(0, name.lastIndexOf("."));

                if (noSuffixName.contains("_")) {
                    String[] arr = noSuffixName.split("_");
                    if (arr.length >= 2) {
                        try {
                            num = Integer.parseInt(arr[arr.length - 1]);
                        } catch (NumberFormatException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }

        @Override
        public int compareTo(Test.FileInfo other) {
            if (other == null){
                return 1;
            }
            return num - other.num;
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值