Java一键批量替换掉文件夹以及子文件的名称

Posted Dream_it_possible!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java一键批量替换掉文件夹以及子文件的名称相关的知识,希望对你有一定的参考价值。

目录

一、通过递归解决多级目录问题 

二、将目录转换为树

三、node.js版实现

四、扩展: 使用递归扫描多级目录下的所有class文件


       今天遇到了一个问题,从网上买的资源带了很多广告,于是我用Java写了一个程序,把这些带广告的文件夹全给替换掉名字,这样所有的目录和文件都干干净净的!

 

一、通过递归解决多级目录问题 

        将所有的子目录和文件放入到一个根目录里,我这里的位置是F:\\\\BaiduNetdiskDownload\\\\Spring Cloud Alibaba微服务架构实战, 采用递归找到所有的子目录和子文件存放到results里,然后调用renameTo方法重新给文件命名。 

        首先将所有要替换的目录放到一个root目录里,然后将要替换掉的内容放入到blackList里,支持多种内容的替换。

package leetcode100;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @Desc:
 * @Author: bingbing
 * @Date: 2022/4/18 0018 19:46
 */
public class ReplaceWord 


    public static void findChild(List<File> results, File file) 
        if (file.isFile()) 
            results.add(file);
         else 
            File[] files = file.listFiles();
            assert files != null;
            for (File f : files) 
                findChild(results, f);
            
        
    


    private static List<String> blackLists = new ArrayList<>();

    static 
        blackLists.add("【更多IT教程 www.baidu.com】");
        blackLists.add("一手IT课程资源+微信*****#[2]");
    


    public static void main(String[] args) 

        String rootPath = "F:\\\\BaiduNetdiskDownload\\\\Spring Cloud Alibaba微服务架构实战";
        File file = new File(rootPath);
        if (!file.exists()) 
            System.out.println("文件不存在!");
            return;
        
        List<File> results = new ArrayList<>();
        findChild(results, file);
        for (File f : results) 
            String filePath = f.getAbsolutePath();
            for (int i = 0; i < blackLists.size(); i++) 
                filePath = filePath.replace(blackLists.get(i), "");
            
            f.renameTo(new File(filePath));
            System.out.println(f.getName());
        
    

执行程序, 观察结果:

        再也不用担心广告了~ 

二、将目录转换为树

        多级的目录结构其实可以看做是一个目录树,我们继承File对象创建一个FileNode:

  public static class FileNode extends File 

        public List<File> childNodes = new ArrayList<>();

        public FileNode(String pathname) 
            super(pathname);
        

        public void addChild(File child) 
            childNodes.add(child);
        

        public FileNode(String pathname, File child) 
            super(pathname);
            childNodes.add(child);
        

    

        通过递归将子目录挂载在父目录上:


    public static FileNode tree(FileNode file) 
        if (file.isFile()) 
            return file;
         else 
            File[] files = file.listFiles();
            assert files != null;
            for (File f : files) 
                file.addChild(f);
            
        
        return file;
    

        转换为tree: 


        FileNode fileNode = new FileNode(rootPath);
        FileNode root = tree(fileNode);
        System.out.println(root);

        所有的目录都挂载在root目录上。 

 

三、node.js版实现

node.js一键批量替换目录下所有子文件的名称_Y_soybean_milk的博客-CSDN博客

四、扩展: 使用递归扫描多级目录下的所有class文件

        Spring 容器启动时,会扫描当前类所在包下的所有目录及子目录的class文件,以备找到需要的Bean。

    private void doScanner(String scanPackage) 
        URL url = this.getClass().getClassLoader().getResource("/" + scanPackage.replaceAll("\\\\.", "/"));
        File rootDir = new File(url.getFile());
        for (File file : rootDir.listFiles()) 
            if (file.isDirectory()) 
                doScanner(scanPackage + "." + file.getName());
             else if (!file.getName().endsWith(".class")) 
                continue;
            

            if (!file.isDirectory()) 
                String className = scanPackage + "." + file.getName().replaceAll(".class", "");
                mapping.put(className, null);
            
        
    

以上是关于Java一键批量替换掉文件夹以及子文件的名称的主要内容,如果未能解决你的问题,请参考以下文章

如何修改百度网盘中文件名称关键词替换

文件名修改批量处理文件名中相同的部分名字的相同部分去掉或替换掉,如何文件名批量繁体转简体教程?

网页版批量文件重命名

百度云盘关键词替换批量重命名

怎样批量去掉文件名称的某些字段

帝国cms插件 一键替换数据表中已发表文章的内容关键字