java实现文件重命名

网友投稿 2104 2022-12-12


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 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 = "讲";

mlZlSxYwG.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讲-文件全名 的键值对存储文件http://

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) + 1http://));

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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringCLoud搭建Zuul网关集群过程解析
下一篇:Java遍历文件夹下所有文件并重新命名
相关文章

 发表评论

暂时没有评论,来抢沙发吧~