批量修改文件名

此篇博客介绍了如何使用ReName类实现文件名的批量重命名,支持特定格式转换,并处理文件夹路径。它针对(fileName_123.xxx)类型的文件,将它们转换为(prefix_00.suffix)格式,涉及文件筛选和排序功能。
摘要由CSDN通过智能技术生成
public class ReName {
    public static void main(String[] args) {
        reName("C:\\Users\\ThinkStation\\Desktop\\2021 年末\\12-20\\222",
            "kp_error_anim",  ".png");
    }

    /**
     * 批量文件重命名
     *
     * 要求: 原文件名满足  fileName_123.xxx 格式。
     * 修改后文件名为 prefix_00.suffix
     *
     * @param dirPath 文件夹路径
     * @param prefix  修改后文件名前一部分
     * @param suffix  修改后文件名后缀
     */
    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<FileInfo> fileInfoList = new ArrayList<>(nameArr.length);
        for(String name : nameArr){
            fileInfoList.add(new FileInfo(name));
        }

        Collections.sort(fileInfoList);

        System.out.println("" + Arrays.toString(nameArr));

        final String format ;
        if (fileInfoList.size() < 100){
            format = "%02d";
        } else{
            format = "%03d";
        }

        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(format, 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<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(FileInfo other) {
            if (other == null){
                return 1;
            }
            return num - other.num;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值