原始需求是这样子,当你有一堆文件夹,为了防止被别人悄悄就转载走,所以在每个文件夹里面加一些‘广告’来源,并且所有文件夹需要加一个自增长序号和固定文字,方便根据编号快速定位到指定文件夹,直接上代码,使用了递归文件夹和修改文件夹名称。

运行效果如下:
50204-nyw9ihegz08.png

UpdateFileName.java

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 自动扫描文件夹下的所有文件并去除文件名中的广告字段
 */
public class UpdateFileName {

    public static int num = 1;

    //    原始推广文件的具体位置,如L:\testdev\扫码.png
    public static String AD0pathfrom = "1";


    //    原始推广文件的具体位置,如L:\testdev\扫码.png
    public static String AD1pathfrom = "1";



    //    原始推广文件的具体位置,如L:\testdev\素材来源-94设计.url
    public static String AD2pathfrom = "1";


    public static String AD3pathfrom = "1";


    /**
     * 程序入口
     *
     * @param args
     */
    public static void main(String[] args) {

        System.out.println("------------欢迎使用批量替换推广广告工具-------------");
        System.out.println("主要功能:文件夹按照1进行递增编号,放入自定义广告文件,最多4个");
        System.out.println("输入的路径格式:如(L:\\\\testdev\\\\扫码.png)");
        System.out.println("输入的路径格式:如(L:\\\\testdev\\\\更多免费素材获取.url)");
        System.out.println("若没有达到4个就粘贴相同的广告即可~");
        System.out.println("-----------------By:Lcry------------------------");

        Scanner sc = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        System.out.println("请输入需要替换的文件夹根目录位置如:L:\\\\testdev");
        String resurl = sc.next();
        for (int i = 1; i <= 4; i++) {
            System.out.println("请输入第" + i + "个广告路径:");
            String next = sc.next();
            list.add(next);
        }
        AD0pathfrom = list.get(0);
        AD1pathfrom = list.get(1);
        AD2pathfrom = list.get(2);
        AD3pathfrom = list.get(3);

        System.out.println("请输入开始编号的序号:如:1");
        int scint = sc.nextInt();
        num = scint;
        recursiveFiles(resurl);

        System.out.println("执行完成");


    }


    /**
     * 进行复制文件操作
     *
     * @param source     源文件地址
     * @param dest       目标文件地址
     * @param bufferSize
     */

    public static void copy(String source, String dest, int bufferSize) {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream(new File(source));
            out = new FileOutputStream(new File(dest));

            byte[] buffer = new byte[bufferSize];
            int len;

            while ((len = in.read(buffer)) > 0) {
                out.write(buffer, 0, len);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 遍历所有文件夹和文件
     *
     * @param path 需要遍历的文件夹路径 如:L:\testdev
     */
    private static void recursiveFiles(String path) {

        String AD0pathto = "".equals(AD0pathfrom) ? null : AD0pathfrom.substring(AD0pathfrom.lastIndexOf("\\") + 1);
        String AD1pathto = "".equals(AD1pathfrom) ? null : AD1pathfrom.substring(AD1pathfrom.lastIndexOf("\\") + 1);
        String AD2pathto = "".equals(AD2pathfrom) ? null : AD2pathfrom.substring(AD2pathfrom.lastIndexOf("\\") + 1);
        String AD3pathto = "".equals(AD3pathfrom) ? null : AD3pathfrom.substring(AD3pathfrom.lastIndexOf("\\") + 1);

        // 创建 File对象
        File file = new File(path);

        // 取 文件/文件夹
        File files[] = file.listFiles();

        // 对象为空 直接返回
        if (files == null) {
            return;
        }

        // 目录下文件
        if (files.length == 0) {
            System.out.println(path + "该文件夹下没有文件");
        }

        // 存在文件 遍历 判断
        for (File f : files) {
            // 判断是否为 文件夹
            if (f.isDirectory()) {

                //如果是文件夹就进行放入推广图片
//                System.out.print("文件夹: ");
                System.out.println(f.getAbsolutePath());
                copy(AD0pathfrom, f.getAbsolutePath() + "\\" + AD0pathto, 10240);
                copy(AD1pathfrom, f.getAbsolutePath() + "\\" + AD1pathto, 10240);
                copy(AD2pathfrom, f.getAbsolutePath() + "\\" + AD2pathto, 10240);
                copy(AD3pathfrom, f.getAbsolutePath() + "\\" + AD3pathto, 10240);
                // 为 文件夹继续遍历
                recursiveFiles(f.getAbsolutePath());
                //进行修改目录
                String dirDirectoryPath = f.getAbsolutePath();// 目录路径
                File finalDirectoryName = new File(dirDirectoryPath +"---"+youxusum()+"-xxx--");
                f.renameTo(finalDirectoryName);
            } else if (f.isFile()) {  // 判断是否为 文件

//                是文件夹进行批量改名,如果是广告则不改:
                if (
                        (AD0pathto != null && f.getName().contains(AD0pathto)) ||
                                (AD2pathto != null && f.getName().contains(AD2pathto)) ||
                                (AD3pathto != null && f.getName().contains(AD3pathto)) ||
                                (AD1pathto != null && f.getName().contains(AD1pathto))
                ) {
                    //                如果发现本身是广告,那么就不再追加随机序列了
                } else {

//                    String dirPath = f.getAbsolutePath();// 目录路径
//                    String toFileName = addsuffix(dirPath);
//                    File finalName = new File(toFileName);
//                    f.renameTo(finalName);
                }

            } else {
                System.out.print("未知错误文件");
            }
        }
    }


    /**
     * 替换文件夹名字 给每个文件夹里面文件增加idword自动生成序列
     * 文件+ 随机ID
     */
    public static String addsuffix(String srcfilename) {
        //获取文件夹前面部分
        String prefixname = srcfilename.substring(0, srcfilename.lastIndexOf("."));
        //获取文件夹结尾
        String suffixname = srcfilename.substring(srcfilename.lastIndexOf("."));
//        需要使用请导入IdWorker类
//        IdWorker idWorker = new IdWorker(1, 1);
//        return prefixname + (idWorker.nextId() + "") + suffixname;
        return prefixname + suffixname;
    }


    /**
     * 生成有序序列
     */
    public static int youxusum() {
        int num = UpdateFileName.num;
        ++UpdateFileName.num;
        return num;
    }

}

参考链接:
https://blog.csdn.net/hapylong/article/details/4594130
https://www.cnblogs.com/mycd/p/5578875.html
https://blog.csdn.net/dodod2012/article/details/79424154

扫描下面二维码,给博主打赏点吧~

微信

微信

支付宝

支付宝


作者:Lcry
本文链接:https://www.51it.wang/ll/1798
商业转载请联系作者获得授权,非商业转载请注明本文出处及文章链接

带符号 * 的表示必填项