网站建设资讯

NEWS

网站建设资讯

java怎么实现文件重命名

这篇文章主要介绍了java怎么实现文件重命名,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

成都创新互联公司主要从事成都网站设计、网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务疏勒,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792

背景

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

思路

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

代码

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

构建排序规则

/***
 * @param filePath 文件夹位置
 * @param startWorld 开始替换的字
 * @param 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;
    }
  }

将中文描述的数字转换为数字,如将 一百二十转换为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;

/**
 * 将一个文件夹中所有满足条件的文件名替换
 * 

 * 条件:将从开始字到结束字的字符串替换成对应的数字  * 

 * 如:第八讲 替换成 8  */ 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);   }   /***    * @param filePath 文件夹位置    * @param startWorld 开始替换的字    * @param 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;   } }

感谢你能够认真阅读完这篇文章,希望小编分享的“java怎么实现文件重命名”这篇文章对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联行业资讯频道,更多相关知识等着你来学习!


当前标题:java怎么实现文件重命名
网站地址:http://njwzjz.com/article/gopiop.html