批量修改文件名

遇到问题,解决问题,然后就是要总结问题,所以有了这篇小白级的技术分享。

  • 场景:做IM聊天时会用到表情库,想引入别人的表情库,又不想改动自己已有的表情文件名称,所以需要把别人的几十张或上百张文件按照自己的需要重命名。
  • 坑:第一想法,小脚本,遍历重命名,做法是java程序,如下:
public static void main(String[] args) {
        //想命名的原文件的路径
        File file = new File("D:/temp/drawable-hdpi");//D:\temp\drawable-hdpi
        for (int i = 0;i<file.listFiles().length;i++){
            File file2 = file.listFiles()[i];
            file2.renameTo(new File("D:/temp/emoji/"+i+".gif"));
        }
		System.out.println("over");
    }
  • 解读:原文件所在目录D:\temp\drawable-hdpi,目标文件所在目录D:\temp\emoji,通过listFiles()得到要修改的所有文件,for循环遍历,每个文件通过renameTo方法,将文件名修改为“数字.gif”
  • 结果:原文件共有106个,执行完后,目标文件夹下有53个,原文件夹下有53个。
  • 分析:苦思冥想、绞尽脑汁……renameTo方法会移动文件,所以每重命名一个文件,原文件夹就少一个文件,listFiles().length就改变一次,同时listFiles()里的文件顺序会往前挪动一个顺序,如果在for循环中加上日志,就会看到,重命名成功的文件都是隔一个隔一个的。

so,原因找到了,for循环的问题(只是不适用于renameTo方法的情况下)
解决:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("hello world!");
		File file = new File("D:/temp/drawable-hdpi");//D:\temp\drawable-hdpi
		System.out.println("before num=:"+file.listFiles().length);
//		int num = file.listFiles().length;
		int i = 0;
        for (File file2:file.listFiles()){
        	System.out.println("第:"+i+"次循环");
//            File file2 = file.listFiles()[i];
            System.out.println("file:"+file2.getName());
            file2.renameTo(new File("D:/temp/emoji/"+i+".gif"));
            System.out.println("rename to:"+i+".gif");
            i++;
        }
        System.out.println("end");
	}

执行,OK,完美的批量修改成功!

  • 举一反三:其他批量操作,for循环遍历场景下的操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值