一、前言
多级子文件夹下,重命名文件。
二、场景需求分析
需求:按需求格式,将子文件夹下的文件重命名。后缀名保留原来的。
操作数据我放在 D:\toolWorkspace\RenameFolder下(RenameFolder就是下面代码中的父文件夹)。
三、完整代码
代码如下:
import java.io.File;
import java.io.IOException;
/**
* @Author xumeng
* @Description
* @Date 2023/3/9 10:32
*/
public class RenameFile {
/**
* 需求:重命名指定文件夹下的文件。格式:学号-页号_文件类型.jpg
*
* */
static int n =0; //用于统计改名总数
public static void main(String[] args) throws IOException {
File parentFolder = new File("D:\\toolWorkspace\\RenameFile");//要求重命名的父文件夹
if(parentFolder.isDirectory()){
File[] cis = parentFolder.listFiles(); //cis 存储当前父文件夹下所有班级
//遍历父文件夹下的所有的 班级信息 子文件夹
for(File classInfo:cis){
if(classInfo.isDirectory()){
File[] sis = classInfo.listFiles(); //sis 存储当前班级下所有学号
//遍历班级文件夹下的所有的 学号 文件夹
for (File stuId:sis){
String sidName = stuId.getName(); //提取 学号文件夹 中的 学号
if(stuId.isDirectory()){
File[] fts = stuId.listFiles(); //fts 存储当前班级学号下所有文件类型
//遍历学号文件夹下的所有的 文件类型 文件夹
for (File fileType:fts){
renameFile(sidName,fileType);
}
}
}
}
}
System.out.println("本次共计改名图片"+n+"张");
}
}
/**
* 需求:重命名文件
*
* */
public static void renameFile(String sidName,File fileType) throws IOException {
String ftName = fileType.getName(); //提取 文件类型文件夹 中的 文件类型
ftName=ftName.replaceAll("\\d+", "");//去除文件类型名前面的数字
if(fileType.isDirectory()){
File[] fs = fileType.listFiles();
if(fs==null){
System.out.println(ftName+"目录下没有文件");
}
for(File ff:fs){ //遍历 文件类型文件夹 中所有文件,进行改名
String oldName = ff.getName(); //获取原文件名
String name = oldName.substring(0,oldName.lastIndexOf("."));
String fileSuffix = oldName.substring(oldName.lastIndexOf(".")+1); //获取文件后缀名
String newName = sidName+"-"+name+"_"+ftName+"."+fileSuffix;
String path = ff.getCanonicalPath();
int index = path.lastIndexOf("\\");
String newPath = path.substring(0,index+1)+newName;
File nf = new File(newPath);
if(ff.renameTo(nf)){
n += 1; //统计改名图片数量
// System.out.println("改名成功");
}else{
System.out.println("改名失败");
}
}
}
}
}
四、总结
如有错误,望大家指正。感谢!!!
相关链接:多级子文件夹的新增、删除和重命名https://mp.csdn.net/mp_blog/creation/editor/129438280