java操作文件之文件重命名实现方式

 更新时间:2026年03月25日 15:38:14   作者:一口茶茶  
这篇文章主要介绍了java操作文件之文件重命名实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

本文仅为日常记录,操作记录,方便后期使用查找

背景

本地电脑文件太多了,又不想一个一个重命名,改名字什么的很麻烦。使用文件夹名称+文件名称作为新的文件名,其他重命名可按需要修改。

先要达到效果:文件夹名称+文件名作为新的文件名称。

读取文件夹和文件信息

        File dirFile = new File(filepath);
//            当前路径下的所有文件夹、文件存放到一个文件数组
        System.out.println(Dir(dirFile));
        //获取文件路径存放到一个数据中 文件绝对路径
        DirAll(dirFile);

获取文件信息

File f = new File(s);
String folder_Fullname = f.getParent();
String folder_name = folder_Fullname.substring(folder_Fullname.lastIndexOf("\\") + 1);
//修改文件名称 新文件名称规则:上一级目录名称+文件名称
//获取文件名称 文件名称 后缀名
String file_Fullname = s.substring(s.lastIndexOf("\\") + 1);
String file_name = file_Fullname.substring(0, file_Fullname.lastIndexOf("."));
String file_lastname = s.substring(s.lastIndexOf(".") + 1);

//修改名称后新文件名称(上一级目录名称+文件名称)    新文件路径
String file_newName = folder_name + file_Fullname;
String file_newFullName = folder_Fullname + "\\" + folder_name + file_Fullname;

System.out.println("文件完整路径 fileFullname:" + s);
System.out.println("文件所在目录 folder_Fullname:" + folder_Fullname);
System.out.println("文件目录名称 folder_name:" + folder_name);
System.out.println("文件完整名称 file_Fullname:" + file_Fullname);
System.out.println("文件名称 file_name:" + file_name);
System.out.println("文件名 file_name:" + file_name + ",扩展名 file_lastname:" + file_lastname);
System.out.println("新文件名称 file_newName:" + file_newName);
System.out.println("新文件完整路径 file_newFullName:" + file_newFullName);

重命名-修改文件名称

//开始重命名 修改文件名称 file_newFullName 新文件名完整路径
File mm = new File(file_newFullName);
if (f.renameTo(mm)) {
    s_num++;
    System.out.println("新文件名[" + file_newName + "]修改成功!");
} else {
    e_num++;
    System.out.println("新文件名[" + file_newName + "]修改失败");
}

执行结果

完整代码

package main;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;

public class renameNewFile {
    public static void main (String[] args) {
        long start = System.currentTimeMillis();
        //1、读取指定目录下所有文件夹及文件文成
        //2、所有文件名称和后缀名
        String filepath;
        filepath = "D:\\testfile\\20220623photossize";

        //读取指定目录下文件信息 包含文件名称 文件路径
        String renameInfo = readFilepathInfo(filepath);
        //验证改名是否成功获取所有文件名称
        testGetfilename2(filepath);
        System.out.println(renameInfo);
        useTime(start);//耗时
    }

    //读取指定目录下文件信息 包含文件名称 文件路径
    private static String readFilepathInfo (String filepath) {
        File dirFile = new File(filepath);
//            当前路径下的所有文件夹、文件存放到一个文件数组
        System.out.println(Dir(dirFile));
        //获取文件路径存放到一个数据中 文件绝对路径
        DirAll(dirFile);

        System.out.println(dirAllStrArr);
        //记录成功失败数量
        int s_num = 0;
        int e_num = 0;
        //解析数组获取所有文件的路径
        System.out.println("=============解析数组获取所有文件的路径====================");
//        for (int i = 0; i < dirAllStrArr.size(); i++) {
        for (String s : dirAllStrArr) {
            System.out.println("------------------------------------------------");
            File f = new File(s);
            String folder_Fullname = f.getParent();
            String folder_name = folder_Fullname.substring(folder_Fullname.lastIndexOf("\\") + 1);
            //修改文件名称 新文件名称规则:上一级目录名称+文件名称
            //获取文件名称 文件名称 后缀名
            String file_Fullname = s.substring(s.lastIndexOf("\\") + 1);
            String file_name = file_Fullname.substring(0, file_Fullname.lastIndexOf("."));
            String file_lastname = s.substring(s.lastIndexOf(".") + 1);

            //修改名称后新文件名称(上一级目录名称+文件名称)    新文件路径
            String file_newName = folder_name + file_Fullname;
            String file_newFullName = folder_Fullname + "\\" + folder_name + file_Fullname;

            System.out.println("文件完整路径 fileFullname:" + s);
            System.out.println("文件所在目录 folder_Fullname:" + folder_Fullname);
            System.out.println("文件目录名称 folder_name:" + folder_name);
            System.out.println("文件完整名称 file_Fullname:" + file_Fullname);
            System.out.println("文件名称 file_name:" + file_name);
            System.out.println("文件名 file_name:" + file_name + ",扩展名 file_lastname:" + file_lastname);
            System.out.println("新文件名称 file_newName:" + file_newName);
            System.out.println("新文件完整路径 file_newFullName:" + file_newFullName);

            //控制台输出
            /*
            文件完整路径 fileFullname:E:\testFilespath\文件5\23234rrr (4).txt
            文件所在目录 folder_Fullname:E:\testFilespath\文件5
            文件目录名称 folder_name:文件5
            文件完整名称 file_Fullname:23234rrr (4).txt
            文件名称 file_name:23234rrr (4)
            文件名 file_name:23234rrr (4),扩展名 file_lastname:txt
            新文件名称 file_newName:文件523234rrr (4).txt
            新文件完整路径 file_newFullName:E:\testFilespath\文件5\文件523234rrr (4).txt
            */
            //开始重命名 修改文件名称 file_newFullName 新文件名完整路径
            File mm = new File(file_newFullName);
            if (f.renameTo(mm)) {
                s_num++;
                System.out.println("新文件名[" + file_newName + "]修改成功!");
            } else {
                e_num++;
                System.out.println("新文件名[" + file_newName + "]修改失败");
            }
        }
        return "新文件名修改成功:" + s_num + "条,失败:" + e_num + "条,执行完成!";
    }


    // 设置一个全局动态数组,来存放文件路径
    // 主要遍历文件夹,包含所有子文件夹、文件的情况时,用到递归,所以要这样设置
    public static ArrayList<String> dirAllStrArr = new ArrayList<>();

    public static void DirAll (File dirFile) {
        if (dirFile.exists()) {
            File[] files = dirFile.listFiles();
            if (files != null) {
                for (File file : files) {
                    // 如果遇到文件夹则递归调用。
                    if (file.isDirectory()) {
                        // 递归调用
                        DirAll(file);
                    } else {
                        // 如果遇到文件夹则放入数组
                        if (dirFile.getPath().endsWith(File.separator)) {
                            dirAllStrArr.add(dirFile.getPath() + file.getName());
                        } else {
                            dirAllStrArr.add(dirFile.getPath() + File.separator
                                    + file.getName());
                        }
                    }
                }
            }
        }
    }


    public static ArrayList<String> Dir (File dirFile) {
        ArrayList<String> dirStrArr = new ArrayList<>();
        if (dirFile.exists()) {
            // 直接取出利用listFiles()把当前路径下的所有文件夹、文件存放到一个文件数组
            File[] files = dirFile.listFiles();
            if (files != null) {
                for (File file : files) {
                    // 如果传递过来的参数dirFile是以文件分隔符,也就是/或者\结尾,则如此构造
                    if (dirFile.getPath().endsWith(File.separator)) {
                        dirStrArr.add(dirFile.getPath() + file.getName());
                    } else {
                        // 否则,如果没有文件分隔符,则补上一个文件分隔符,再加上文件名,才是路径
                        dirStrArr.add(dirFile.getPath() + File.separator
                                + file.getName());
                    }
                }
            }
        }
        return dirStrArr;
    }

    //    getAllFileName (String path, ArrayList<String> fileName)是包括当前文件及其子文件的文件名。
    private static void testGetfilename2 (String filepath) {
        ArrayList<String> listFileName = new ArrayList<>();
        getAllFileName(filepath, listFileName);
        for (String name : listFileName) {
            System.out.println(name);
        }
    }

    public static void getAllFileName (String path, ArrayList<String> fileName) {
        File file = new File(path);
        File[] files = file.listFiles();
        String[] names = file.list();
        if (names != null)
            fileName.addAll(Arrays.asList(names));
        if (files != null) {
            for (File a : files) {
                if (a.isDirectory()) {
                    getAllFileName(a.getAbsolutePath(), fileName);
                }
            }
        }
    }

    //计算执行耗时
    private static void useTime (long start) {
        long finish = System.currentTimeMillis();
        long timeElapsed = finish - start;
        System.out.println("耗时:" + timeElapsed);
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Boot Actuator 漏洞利用小结

    Spring Boot Actuator 漏洞利用小结

    spring对应两个版本,分别是Spring Boot 2.x和Spring Boot 1.x,因此后面漏洞利用的payload也会有所不同,这篇文章主要介绍了Spring Boot Actuator 漏洞利用小结,需要的朋友可以参考下
    2023-11-11
  • java中对象和Map互相转换的几种常见方式举例

    java中对象和Map互相转换的几种常见方式举例

    Map在日常开发应用中的频率很高,最常用的实现类是HashMap和有序的TreeMap,下面这篇文章主要给大家介绍了关于java中对象和Map互相转换的几种常见方式举例,需要的朋友可以参考下
    2024-01-01
  • 简单了解springboot中的配置文件相关知识

    简单了解springboot中的配置文件相关知识

    这篇文章主要介绍了简单了解springboot中的配置文件相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 解决SpringBoot整合RocketMQ遇到的坑

    解决SpringBoot整合RocketMQ遇到的坑

    这篇文章主要介绍了解决SpringBoot整合RocketMQ遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringBoot启动报错的11个高频问题排查与解决终极指南

    SpringBoot启动报错的11个高频问题排查与解决终极指南

    这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2025-03-03
  • Java之springcloud Sentinel案例讲解

    Java之springcloud Sentinel案例讲解

    这篇文章主要介绍了Java之springcloud Sentinel案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Swagger中@ApiIgnore注解的使用详解

    Swagger中@ApiIgnore注解的使用详解

    这篇文章主要介绍了Swagger中@ApiIgnore注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • JavaSE异常Exception处理方法以及自定义

    JavaSE异常Exception处理方法以及自定义

    网络异常exception是指在网络通信过程中出现的异常情况,这些异常可能是由于网络连接不稳定、网络故障、服务器故障、网络拥堵等原因导致的,这篇文章主要给大家介绍了关于JavaSE异常Exception处理方法以及自定义的相关资料,需要的朋友可以参考下
    2024-07-07
  • Java超详细梳理异常处理机制

    Java超详细梳理异常处理机制

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等
    2022-04-04
  • java解析xml常用的几种方式总结

    java解析xml常用的几种方式总结

    这篇文章主要介绍了java解析xml常用的几种方式总结,有需要的朋友可以参考一下
    2013-11-11

最新评论