一.批量修改文件名称
在生活和工作中,常常会遇到批量修改文件名称的工作, 如两个不同的系统进行合并,如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); } } } } }
修改的只是名称,暂时不支持修改文件的类型。 批量修改文件的类型,老蝴蝶在后面会说。
谢谢!!!