栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java实现文件重命名

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java实现文件重命名

背景

我们经常在网上下载一些视频教程,然而这些视频命名规则各不相同,即使对于相同类型的文件名来说,当文件数量很大且文件名全部是中文时,文件排序是非规则的,因此本篇博客主要讲解一种改变文件夹名称使得文件按照规律进行排序。

思路

根据文件名对文件进行排序,然后重命名文件即可。

代码

规则:如 将文件名中带有 “第八讲 ”替换成“8”:

构建排序规则


  private void ReName(String filePath, String startWorld, String endWorld) {
    File file = new File(filePath);
    if (!file.exists() || !file.isDirectory()) {
      System.out.println("文件不存在");
      return;
    }
    String[] list = file.list();
    //以 第xxx讲-文件全名 的键值对存储文件
    HashMap paths = new HashMap();
    for (String str : list) {
      int start = str.indexOf(startWorld) + 1;
      int end = str.indexOf(endWorld);
      if (start != 0 && end != -1) {
 paths.put(str.substring(start, end), str);
      } else {
 System.out.println("文件 " + str + " 不满足替换条件");
      }
    }
    //对文件名进行排序
    orderPath(filePath, endWorld, paths);
  }

排序

private void orderPath(String filePath, String endWorld,
      HashMap paths) {
    if (paths.isEmpty()) {
      return;
    }
    TreeMap map = new TreeMap();
    for (String str : paths.keySet()) {
      map.put(parseInt(str), paths.get(str));
    }
    //重命名该文件
    ReNameFile(filePath, endWorld, map);
  }

重命名

private void ReNameFile(String filePath, String endWorld,
      TreeMap map) {
    for (int i : map.keySet()) {
      String path = map.get(i);
      File f = new File(filePath + File.separator + path);
      File dest = new File(filePath + File.separator + i
   + path.substring(path.indexOf(endWorld) + 1));
      if (f.exists() && !dest.exists()) {
 f.renameTo(dest);
      }
      f = null;
      dest = null;
    }
  }

将中文描述的数字转换为数字,如将 一百二十转换为120

private int parseInt(String str) {
    if (str.length() == 1) {
      if (str.equals("十")) {
 return 10;
      }
      return getInt(str.charAt(0));
    } else {
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < str.length(); i++) {
 char c = str.charAt(i);
 if (c != '百' && c != '十') {
   sb.append(getInt(c));
 }
      }
      int res = Integer.parseInt(sb.toString());
      if (str.charAt(str.length() - 1) == '百') {
 res *= 100;
      } else if (str.charAt(str.length() - 1) == '十') {
 res *= 10;
      }
      if (str.charAt(0) == '十') {
 res += 10;
      }
      return res;
    }
  }

完整代码

import java.io.File;
import java.util.HashMap;
import java.util.TreeMap;


public class Main {

  public static void main(String[] args) {
    Main m = new Main();
    // 文件夹位置
    String filePath = "D:\新建文件夹\OOAD与UML教学视频";
    // 从哪个字(startWorld)开始替换到哪个字(endWorld)结束
    String startWorld = "第";
    String endWorld = "讲";
    m.ReName(filePath, startWorld, endWorld);
  }

  
  private void ReName(String filePath, String startWorld, String endWorld) {
    File file = new File(filePath);
    if (!file.exists() || !file.isDirectory()) {
      System.out.println("文件不存在");
      return;
    }
    String[] list = file.list();
    //以 第xxx讲-文件全名 的键值对存储文件
    HashMap paths = new HashMap();
    for (String str : list) {
      int start = str.indexOf(startWorld) + 1;
      int end = str.indexOf(endWorld);
      if (start != 0 && end != -1) {
 paths.put(str.substring(start, end), str);
      } else {
 System.out.println("文件 " + str + " 不满足替换条件");
      }
    }
    //对文件名进行排序
    orderPath(filePath, endWorld, paths);
  }

  private void orderPath(String filePath, String endWorld,
      HashMap paths) {
    if (paths.isEmpty()) {
      return;
    }
    TreeMap map = new TreeMap();
    for (String str : paths.keySet()) {
      map.put(parseInt(str), paths.get(str));
    }
    //重命名该文件
    ReNameFile(filePath, endWorld, map);
  }

  private void ReNameFile(String filePath, String endWorld,
      TreeMap map) {
    for (int i : map.keySet()) {
      String path = map.get(i);
      File f = new File(filePath + File.separator + path);
      File dest = new File(filePath + File.separator + i
   + path.substring(path.indexOf(endWorld) + 1));
      if (f.exists() && !dest.exists()) {
 f.renameTo(dest);
      }
      f = null;
      dest = null;
    }
  }

  private int parseInt(String str) {
    if (str.length() == 1) {
      if (str.equals("十")) {
 return 10;
      }
      return getInt(str.charAt(0));
    } else {
      StringBuffer sb = new StringBuffer();
      for (int i = 0; i < str.length(); i++) {
 char c = str.charAt(i);
 if (c != '百' && c != '十') {
   sb.append(getInt(c));
 }
      }
      int res = Integer.parseInt(sb.toString());
      if (str.charAt(str.length() - 1) == '百') {
 res *= 100;
      } else if (str.charAt(str.length() - 1) == '十') {
 res *= 10;
      }
      if (str.charAt(0) == '十') {
 res += 10;
      }
      return res;
    }
  }

  private int getInt(char c) {
    int res = -1;
    switch (c) {
    case '一':
      res = 1;
      break;

    case '二':
      res = 2;
      break;
    case '三':
      res = 3;
      break;
    case '四':
      res = 4;
      break;
    case '五':
      res = 5;
      break;
    case '六':
      res = 6;
      break;
    case '七':
      res = 7;
      break;
    case '八':
      res = 8;
      break;
    case '九':
      res = 9;
      break;
    case '零':
      res = 0;
      break;
    }
    return res;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/134845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号