Java批量修改文件名称(十四)

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

上一章简单介绍了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);
				}
			}
			
		}
	}
}

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

谢谢!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两个蝴蝶飞

你的鼓励,是老蝴蝶更努力写作的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值