批量修改文件名

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

  • 场景:做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
  • 解读:原文件所在目录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循环遍历场景下的操作。

你可能感兴趣的:(开发笔记,批量修改,批量重命名,IM聊天,表情库,renameTo)