【小工具】一个Java批量修改指定文件夹下的文件名。复习下File及政治表达式
2023-02-18 16:30:16 时间
起因:
凯哥最近再看一个视频,从网上下载的,但是,因为其他网站把所有的文件都添加了其自己的信息。看上很长。而且影响到有些文档的使用。比如使用markdown写的,图片直接再img下。因为,文件名称添加了其他信息,导致再打开的时候,图片查看不到。
解决方案:
写个程序,把所有的相关的文字都去掉。
比如:高并发【凯哥 Java kaigejava】.png 这一类的都去掉。
其中把【凯哥 Java kaigejava】去掉。
思路:
1:根据输入的文件夹目录,遍历所有的文件,如果是文件夹接着遍历。
这里就会使用到【递归】这个思路
2:file类的几个常用方法
获取文件夹下的所有文件:File[] fileList = file.listFile();
判断一个文件是否是文件夹:file.isDirectory();如果是文件夹,进行递归处理
文件重命名:file.renameTo(newFile);
3:因为【xxx】里面又不是规律的。这个时候,就需要使用正则来匹配了。
先判断是否包含了“【”.如果包含了,使用正则进行匹配: String rgex = "\\【(.*?)\\】";
如果符合规则,将其替换掉即可。
先看相关代码截图:
正则处理及替换:
再来看看处理后的效果:
完整的简单代码:
public static void main(String[] args) throws Exception {
String pathName = "E:\\BaiduNetdiskDownload\\【凯 哥Java kaigejava】凯哥项目 - Java Springboot2.0(资料、代码。讲义)完整";
String oldStr = "【";
String newStr = "";
List<String> allFileName = Lists.newArrayList();
Long startTime = System.currentTimeMillis();
allFileName = updateAllFileName(pathName,allFileName,oldStr,newStr);
Long entTime = System.currentTimeMillis();
System.out.println("==耗时:"+(entTime-startTime)/1000);
}
private static List<String> updateAllFileName(String pathName,List<String> allFileName,
String oldStr,String newStr) {
File file = new File(pathName);
//获取指定文件夹下的所有文件
File[] fileList = file.listFiles();
for(File lsFile : fileList ){
if(lsFile.isDirectory()){ //是文件夹
allFileName= updateAllFileName(lsFile.getAbsolutePath()+File.separator,allFileName,oldStr,newStr);
}else{ //是文件
String oldFileName = lsFile.getName();
System.out.println("==修改前文件名称:"+oldFileName);
if(oldFileName.contains(oldStr)){
String rgex = "\\【(.*?)\\】";
String klContract =null;
Pattern pattern = Pattern.compile(rgex);
Matcher m = pattern.matcher(oldFileName);
while (m.find()) {
int i = 1;
klContract = m.group(i);
}
String newFileName = oldFileName.replaceAll(oldStr+klContract+"】",newStr);
File newFile = new File(pathName+File.separator+newFileName);
lsFile.renameTo(newFile);
System.out.println("修改后的文件名称:"+newFile);
}
}
}
return allFileName;
}
总结:
其实写这一篇主要是为了回顾下file类及正则的使用。
东西长时间不用容易忘掉,自己模拟场景来回顾回顾。哪里写的不好,恳请批评。
希望每天都有收获。一起努力。
相关文章
- 哈夫曼树 编码-【数据结构】树形结构——哈夫曼编码
- 内联函数 c-浅谈内联函数与宏定义的区别详解
- 哈夫曼树 编码-哈夫曼树原理及Java编码实现
- Solidity泰山众筹系统丨泰山众筹项目系统开发详细源码逻辑(成熟Demo)
- 笔记本usb接口错误代码39-Win10改Win7系统USB接口不能用的原因及解决方法
- 哈夫曼树 编码-# 哈夫曼树的应用——哈夫曼编码
- 光纤耦合器图片-一种新型光纤耦合器
- 哈夫曼树 编码-数据结构(C语言)
- 【答疑解惑第十二讲】windows编程学习框架图
- 哈夫曼树 编码-【UVA No. 12676】转换哈夫曼编码 Inverting Huffman
- 解释器模式举例-10个常见的软件架构模式
- 解释器模式举例-柯里化的前生今世(四):编译器与解释器
- Tensorflow添加层def add_layer()
- 解释器模式举例-TypeScript 类型体操天花板,用类型运算写一个 Lisp 解释器
- 算法的权值-基于局部权值阈值调整的BP 算法的研究.docx
- 算法的权值-kruskal算法(克鲁斯卡尔算法)详解
- bash 安全漏洞-Bash软件安全漏洞及修复方法
- bash 安全漏洞-bash代码注入的安全漏洞
- 电脑的语言栏-电脑中的语言栏设置,有什么方法?
- 电脑的语言栏-电脑语言栏不见了怎么调出来_电脑语言栏没有了怎么恢复