JAVA实现批量修改文件名称

假设你某天跟朋友出去玩,使用某数码相机拍摄了一些照片
但是当你回来的时候你发现所有的照片都是如下命名的
P1020335.JPG
P1020336.JPG
P1020337.JPG
P1020338.JPG
P1020339.JPG

这些文件名实际上是自动生成的,对你来说不方便看。
你现在希望将这些照片都改成“2016-4-15-i”
i表示第几张照片如
2016-4-15-1
2016-4-15-2
2016-4-15-3
请设计一个程序实现自动修改。

##思路
封装目录
获取该目录下所有的文件的File数组
遍历该File数组,得到每一个File对象
拼接一个新的名称,然后重命名即可

import java.io.File;
public class Java_2
{
    public static void main(String[] args)
    {
        File file = new File("d:/photos");
        File[] list = file.listFiles();

        // 如果目录下文件存在
        if (file.exists() && file.isDirectory())
        {
            for (int i = 0; i < list.length; i++)
            {
                //取文件名子存入name中
                String name = list[i].getName();
                // 截取.之前的字符串出来
                int index = name.indexOf(".");
                // 截取.JPG出来
                int index2 = name.lastIndexOf(".");
                String name3 = name.substring(index2);
                // 拼接字符串
                String newName = "2016-4-15-" + (i + 1) + name3;
                //重命名
                File dest = new File("d:/photos" + "/" + newName);
                list[i].renameTo(dest);
                System.out.println(dest.getName());
            }
        }
    }
}

我在网上下载了一堆JAVA教学视频,在网上找过一堆批量重命名工具给他们重命名,发现这些工具要么是太机械,把非本类名字的文件也给重命名了,要么就是无法很好的实现其功能,所以写了一个简单的小程序,解决了我个人自己的需求
将F:\圣思源目录下
[北京圣思园Java培训教学视频]Java.SE.第八讲.理解面向对象程序设计.rar
[北京圣思园Java培训教学视频]Java.SE.第二十七讲.访问控制符详解.rar
..
/文件重命名为以下格式(仅去掉前缀)
Java.SE.第八讲.理解面向对象程序设计.rar
Java.SE.第二十七讲.访问控制符详解.rar
….
并且直接略去本类中不满足要求的文件夹或其他文件 并将修改好的文件放入D:/photos文件夹

package com.cskaoyan.java15;
import java.io.File;
public class JAVA_0119
{
    public static void main(String[] args)
    {
        File file = new File("F:\\圣思源");
        File[] list = file.listFiles();
// 如果目录下文件存在
        if (file.exists() && file.isDirectory())
        {
            for (int i = 0; i < list.length; i++)
            {
//取文件名子存入name中
                String name = list[i].getName();
// 截取"]"之前的字符串出来
                int index = name.indexOf("]");
                String name2 = name.substring(index + 1);
//重命名并存入d:/photos
                File dest = new File("d:/photos" + "/" + name2);
                list[i].renameTo(dest);
                System.out.println(dest.getName());
            }
    }

}

总结:用好File类方法和String类字符串拼接,基本都可以解决有一定规律的文件批量重命名的问题

String类可能使用的方法

substring(int beginIndex) 
         截取从beginIndex到末尾的字符串并返回
substring(int beginIndex, int endIndex) 
         截取从beginIndex到endIndex的字符串并返回 
concat(String str) 
          将指定字符串str连接到此字符串的结尾
indexOf(int ch) 
          返回指定字符在此字符串中第一次出现处的索引
indexOf(String str) 
          返回指定子字符串在此字符串中第一次出现处的索引
lastIndexOf(int ch) 
          返回指定字符在此字符串中最后一次出现处的索引
lastIndexOf(int ch, int fromIndex) 
          返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索 
length()   返回此字符串的长度
replace(CharSequence target, CharSequence replacement) 
          使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串
replaceAll(String regex, String replacement) 
          使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串

修改前
1.png

修改后
4.png

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于自己经常利用浏览器插件下载网页图片,由此产生很多的文件夹和文件,这些文件夹的名字多半是网页的title,导致文件夹名很长,文件名多是些很长的数。感觉这样的状况不是很好就自己用java实现了简单的shell来管理这些自动下载的批量文件产生的文件夹和文件! 使用注意事项: 该程序默认的工作路径是c:\盘,建议在windows环境下利用这则小程序,linux下未测试。 这个简单的java shell拥有以下几个命令: cd 进入要工作的目录 ls 列出该工作目录下的文件文件夹 re 对工作目录下的文件夹名或文件名进行改名操作 man 对具体的命令的详细帮助文档 pwd 显示当前工作的目录 history 显示已经输入的历史命令 help 调取帮助文档命令 exit 退出当前的程序 其中re修改文件以及文件夹名的命令是这个程序的价值体现。 re/cd/ls/man这四个命令拥有命令选项,在使用命令选项的规则统一是:xx-uuff其中xx代表命令,-代表分隔符是必须的,uu代表命令选项,ff代表具体需求的字符。 pwd/history/help/exit是单个输入的命令,没有命令选项。 利用这样的命令:man-cd就可以查看cd命令使用的具体介绍,其中-是必须的,其它带有命令选项的都可以通过这种方式查看命令帮助文档。 例如输入:man-re就会列出以下信息 对当前工作目录下的文件夹名和文件名进行改动的命令: re -j@#将目录下所有的文件夹名字中@#间(包括@#)内容去掉 re -q@将目录下所有文件夹名中@后(包括@)的内容去掉 re -h@将目录下所有文件夹名中@前(包括@)的内容去掉 re -k@将目录下所有文件名中的@去掉,当@为.时表示去掉名字中的空格(特注) re -m@#$将目录下所有文件名中的@#$去掉,这是去掉名字中多个字符的命令 re -r@#将目录下所有文件名中的@用#替换掉 re -s@#$%将目录下所有文件名中的@用#替换,$用%替换,这是替换名字中多个字符的命令 re -f+前面七个命令的命令选项的话就是对该工作目录下的所有文件文件名起相应作用(小心使用)! re -fh.ppp.xxx将目录下所有符合条件的文件文件名的后缀ppp改成xxx!(较复杂,还未实现) re -fa将当前工作目录下的所有文件名按数字递增方式命!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值