Java一键批量替换掉文件夹以及子文件的名称
Posted Dream_it_possible!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java一键批量替换掉文件夹以及子文件的名称相关的知识,希望对你有一定的参考价值。
目录
今天遇到了一个问题,从网上买的资源带了很多广告,于是我用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一键批量替换掉文件夹以及子文件的名称的主要内容,如果未能解决你的问题,请参考以下文章