前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小工具】一个Java批量修改指定文件夹下的文件名。复习下File及政治表达式

【小工具】一个Java批量修改指定文件夹下的文件名。复习下File及政治表达式

作者头像
凯哥Java
发布2022-12-15 17:06:59
4050
发布2022-12-15 17:06:59
举报
文章被收录于专栏:凯哥Java凯哥Java

起因:

凯哥最近再看一个视频,从网上下载的,但是,因为其他网站把所有的文件都添加了其自己的信息。看上很长。而且影响到有些文档的使用。比如使用markdown写的,图片直接再img下。因为,文件名称添加了其他信息,导致再打开的时候,图片查看不到。

解决方案:

写个程序,把所有的相关的文字都去掉。

比如:高并发【凯哥 Java kaigejava】.png 这一类的都去掉。

其中把【凯哥 Java kaigejava】去掉。

思路:

1:根据输入的文件夹目录,遍历所有的文件,如果是文件夹接着遍历。

    这里就会使用到【递归】这个思路

2:file类的几个常用方法

 获取文件夹下的所有文件:File[] fileList = file.listFile();

判断一个文件是否是文件夹:file.isDirectory();如果是文件夹,进行递归处理

文件重命名:file.renameTo(newFile);

3:因为【xxx】里面又不是规律的。这个时候,就需要使用正则来匹配了。

先判断是否包含了“【”.如果包含了,使用正则进行匹配: String rgex = "\\【(.*?)\\】";

如果符合规则,将其替换掉即可。

先看相关代码截图:

241d4d8b9862ab19c0938f86632a26b6.png
241d4d8b9862ab19c0938f86632a26b6.png

正则处理及替换:

967d18cd455a39855f3c48618560640a.png
967d18cd455a39855f3c48618560640a.png

再来看看处理后的效果:

de3d5ffe39138a08f9007c3c4053722e.png
de3d5ffe39138a08f9007c3c4053722e.png

完整的简单代码:

代码语言:javascript
复制
public static void main(String[] args) throws Exception {
    String pathName = "E:\\BaiduNetdiskDownload\\【凯 哥Java kaigejava】凯哥项目 - Java Springboot2.0(资料、代码。讲义)完整";
    String oldStr = "【";
    String newStr = "";
    List<String> allFileName = Lists.newArrayList();
    Long startTime = System.currentTimeMillis();
    allFileName = updateAllFileName(pathName,allFileName,oldStr,newStr);
    Long entTime  = System.currentTimeMillis();
    System.out.println("==耗时:"+(entTime-startTime)/1000);

}

private static List<String> updateAllFileName(String pathName,List<String> allFileName,
                                              String oldStr,String newStr) {
    File file = new File(pathName);
    //获取指定文件夹下的所有文件
    File[] fileList = file.listFiles();
    for(File lsFile : fileList ){
        if(lsFile.isDirectory()){  //是文件夹
            allFileName= updateAllFileName(lsFile.getAbsolutePath()+File.separator,allFileName,oldStr,newStr);
        }else{  //是文件
           String oldFileName = lsFile.getName();
            System.out.println("==修改前文件名称:"+oldFileName);
           if(oldFileName.contains(oldStr)){
               String rgex = "\\【(.*?)\\】";
               String klContract =null;
               Pattern pattern = Pattern.compile(rgex);
               Matcher m = pattern.matcher(oldFileName);
               while (m.find()) {
                   int i = 1;
                   klContract = m.group(i);
               }

                String newFileName = oldFileName.replaceAll(oldStr+klContract+"】",newStr);
                File newFile = new File(pathName+File.separator+newFileName);
               lsFile.renameTo(newFile);
               System.out.println("修改后的文件名称:"+newFile);
           }
        }
    }
    return allFileName;
}

总结:

其实写这一篇主要是为了回顾下file类及正则的使用。

东西长时间不用容易忘掉,自己模拟场景来回顾回顾。哪里写的不好,恳请批评。

希望每天都有收获。一起努力。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档