古语有云: 万恶淫为首,百善孝为先。 我们后辈当自勉。

上一章简单介绍了Properties 类的详细使用(十三),如果没有看过,​​请观看上一章​​

一.批量修改文件名称

在生活和工作中,常常会遇到批量修改文件名称的工作, 如两个不同的系统进行合并,如C1和C2, 以前都叫C1,现在要将其中的一个C1开头全部改成C2开头, 即 文件名称字符串替换性质的修改名称。 也有以前的文件名称都是乱写的,各个文件名称之间没有意义,统一改成以什么Xxx开头,后面加上数字1,2,3 类型的修改,或者是 副本_(数字)的形式。 数字也有用时间戳替换的,属于批量改变文件不重复性质的。

修改文件名称,主要是运行 java.io.File 类里面的 renameTo() 方法。 主要原理是,递归遍历目录下的所有的文件,将文件的名称进行替换。

老蝴蝶刚接触批量修改文件的时候,就是将C1 批量修改成C2的形式。

二. 将C1 命名成 C2 形式的批量修改。

传入的参数是 路径名 原先的名 要替换的新名。

采用 args[] 的形式进行接收,可以直接通过控制台 进行操作。

import java.io.File;
public class FileRename {
public static void main(String[] args) {
if(args.length!=3){
System.out.println("请按照路径 修改前的名字 修改后的名字 的格式输入");
return ;
}
File path=new File(args[0]);
//要支持路径和文件两种方式。
if(!path.exists()){
System.out.println("输入文件路径有误");
return ;
}
renameFile(path,args[1],args[2]);

System.out.println("重命名文件成功");
}
public static void renameFile(File file,String old_name,String new_name){
if(file.isFile()){
//是文件。
//取出文件的绝对路径。
String filePath=file.getAbsolutePath();
//取出文件的名称。
String fileName=file.getName();
//计算出索引的值。
int index=filePath.indexOf(fileName);
if(fileName.indexOf(old_name)>=0){
int index2=fileName.indexOf(old_name);
//进行替换。 newName为替换后的新的名称。
String newName=fileName.replace(old_name,new_name);
String newPath=filePath.substring(0,index)+fileName.substring(0,index2)+newName+fileName.substring(index2+fileName.length());
file.renameTo(new File(newPath));
}
}else if(file.isDirectory()){ //是目录的话
//将目录名也进行修改。
/* String directName=file.getName(); //取出目录的名字。
if(directName.indexOf(old_name)>=0){ //在过程中,如果修改目录名称的话,需要进行处理。

}*/
File fileNames[]=file.listFiles();
if(fileNames!=null&&fileNames.length>0){
for(File f:fileNames){
renameFile(f,old_name,new_name);
}
}

}
}
}

三. 统一命名成 前缀+数字的形式。

每个数字默认从1开始,各个目录下依次进行增加。

按照 路径 前缀 后缀 三个参数进行输入。 其中,后缀可以省略,如果是省略,则默认为"".

import java.io.File;
public class FileRename {
public static void main(String[] args) {

String suffix="";
if(args.length!=3&&args.length!=2){
System.out.println("请按照路径 文件前缀 文件后缀(可省略) 的格式输入");
return ;
}
if(args.length==3){
suffix=args[2]; //如果为2,默认就是空格。
}

File path=new File(args[0]);
//要支持路径和文件两种方式。
if(!path.exists()){
System.out.println("输入文件路径有误");
return ;
}
renameFile(path,args[1],1,suffix);

System.out.println("重命名文件成功");
}
public static void renameFile(File file,String prefix,int num,String suffix){
if(file.isFile()){
//是文件。
//取出文件的绝对路径。
String filePath=file.getAbsolutePath();
//取出文件的名称。
String fileName=file.getName();
//计算出索引的值。
int index=filePath.indexOf(fileName);
//获取文件的类型。
String type=fileName.substring(fileName.lastIndexOf("."));
String newPath=filePath.substring(0,index)+prefix+num+suffix+type;
file.renameTo(new File(newPath));

}else if(file.isDirectory()){ //是目录的话
int startNum=0; //是目录的话,就重置成0.
File fileNames[]=file.listFiles();
if(fileNames!=null&&fileNames.length>0){
for(File f:fileNames){
startNum++;
renameFile(f,prefix,startNum,suffix);
}
}

}
}
}

修改的只是名称,暂时不支持修改文件的类型。 批量修改文件的类型,老蝴蝶在后面会说。

谢谢!!!