这篇文章主要介绍了java怎么实现文件重命名,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
背景
我们经常在网上下载一些视频教程,然而这些视频命名规则各不相同,即使对于相同类型的文件名来说,当文件数量很大且文件名全部是中文时,文件排序是非规则的,因此本篇博客主要讲解一种改变文件夹名称使得文件按照规律进行排序。
思路
根据文件名对文件进行排序,然后重命名文件即可。
代码
规则:如 将文件名中带有 “第八讲 ”替换成“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<String, String> paths = new HashMap<String, String>(); 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<String, String> paths) { if (paths.isEmpty()) { return; } TreeMap<Integer, String> map = new TreeMap<Integer, String>(); for (String str : paths.keySet()) { map.put(parseInt(str), paths.get(str)); } //重命名该文件 ReNameFile(filePath, endWorld, map); }
重命名
private void ReNameFile(String filePath, String endWorld, TreeMap<Integer, String> 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; /** * 将一个文件夹中所有满足条件的文件名替换 * <p> * 条件:将从开始字到结束字的字符串替换成对应的数字 * <p> * 如:第八讲 替换成 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<String, String> paths = new HashMap<String, String>(); 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<String, String> paths) { if (paths.isEmpty()) { return; } TreeMap<Integer, String> map = new TreeMap<Integer, String>(); for (String str : paths.keySet()) { map.put(parseInt(str), paths.get(str)); } //重命名该文件 ReNameFile(filePath, endWorld, map); } private void ReNameFile(String filePath, String endWorld, TreeMap<Integer, String> 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怎么实现文件重命名”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。