博文背景:
Java知识分享网http://www.java1234.com/a/yuanchuang/里的视频涉及到Java开发常用到的技术。我从那里下载下来的视频,在文件夹中不是按照顺序排列的,于是用数字开头对它们进行重命名,即将“[www.java1234.com]《一头扎进XML》第一讲.mp4”重命名为“1[www.java1234.com]《一头扎进XML》第一讲.mp4”。
有的文件夹中的个数很多,手动重命名花费时间太多,而且很无聊,故写了下面的程序来实现这个过程。特此记录。
代码中含有的知识点:
- 如何弹出目录选择框;
- 判断以数字开头,中间含义数字的正则表达式;
- 计数文件夹中的文件个数;
- 如何对文件重命名
代码:
package com.malw.prefix;
import java.io.File;
import java.util.regex.Pattern;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.filechooser.FileSystemView;
/**
* 本类的功能是为文件重命名
* @author livy
*
*/
public class AddPrefix {
private static String[] chUpper=new String[]{"第一讲","第二讲","第三讲","第四讲","第五讲","第六讲","第七讲","第八讲","第九讲","第十讲",
"第十一讲","第十二讲","第十三讲","第十四讲","第十五讲","第十六讲","第十七讲","第十八讲","第十九讲","第二十讲",
"第二十一讲","第二十二讲","第二十三讲","第二十四讲","第二十五讲","第二十六讲","第二十七讲","第二十八讲","第二十九讲","第三十讲",
"第三十一讲","第三十二讲","第三十三讲","第三十四讲","第三十五讲","第三十六讲","第三十七讲","第三十八讲","第三十九讲","第四十讲",
"第四十一讲","第四十二讲","第四十三讲","第四十四讲","第四十五讲","第四十六讲","第四十七讲","第四十八讲","第四十九讲","第五十讲",};
private static String[] chUpperWithNum=new String[]{"第1讲","第2讲","第3讲","第4讲","第5讲","第6讲","第7讲","第8讲","第9讲","第10讲",
"第11讲","第12讲","第13讲","第14讲","第15讲","第16讲","第17讲","第18讲","第19讲","第20讲",
"第21讲","第22讲","第23讲","第24讲","第25讲","第26讲","第27讲","第28讲","第29讲","第30讲",
"第31讲","第32讲","第33讲","第34讲","第35讲","第36讲","第37讲","第38讲","第39讲","第40讲",
"第41讲","第42讲","第43讲","第44讲","第45讲","第46讲","第47讲","第48讲","第49讲","第50讲",};
/**
* 选择文件并重命名
* @param file
*/
public void reName(File file){
Pattern pattern = Pattern.compile("^(\\d+)(.*)");//正则表达式,以数字开头
Pattern pattern2 = Pattern.compile("(.*)(\\d+)(.*)");//中间含有数字
if(file.isDirectory()){//选择的文件夹
File[] files = file.listFiles();//指定路径的所有文件(文件夹)
int numFiles = files.length;//文件个数
if(numFiles>0){
for(int i=0;i<numFiles;i++){
doRename(files[i],pattern,pattern2);
}
}else{
System.out.println("不存在文件");
}
}else if(file.isFile()){//选择的文件
doRename(file,pattern,pattern2);
}
}
/**
* 为文件重命名
* @param file
* @param pattern
*/
public void doRename(File file,Pattern pattern,Pattern pattern2){
String fileName = file.getName();
String path = file.getParent();
/*判断文件是否不以数字开头,是否mp4或f4v格式*/
if(!pattern.matcher(fileName).matches()&&(fileName.endsWith(".mp4")||fileName.endsWith(".f4v")||fileName.endsWith(".flv"))){
//选择使用chUpperWithNum还是chUpper
int start=fileName.indexOf("第");
int end=fileName.indexOf("讲");
boolean b = pattern2.matcher(fileName.substring(start, end)).matches();
if(b){
for(int j=0;j<chUpperWithNum.length;j++){
if(fileName.contains(chUpperWithNum[j])){
String newTitle=path+"\\"+(j+1)+fileName;
file.renameTo(new File(newTitle));//为文件重命名为newNames[i]
break;
}
}
}else{
for(int j=0;j<chUpper.length;j++){
if(fileName.contains(chUpper[j])){
String newTitle=path+"\\"+(j+1)+fileName;
file.renameTo(new File(newTitle));//为文件重命名为newNames[i]
break;
}
}
}
}else{
System.out.println(fileName);
}
}
/**
* 选择路径或文件
* @return
*/
public File selectFilesAndDir(){
JFileChooser jfc=new JFileChooser();
//设置当前路径为桌面路径,否则将我的文档作为默认路径
FileSystemView fsv = FileSystemView .getFileSystemView();
jfc.setCurrentDirectory(fsv.getHomeDirectory());
//JFileChooser.FILES_AND_DIRECTORIES 选择路径和文件
jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES );
//弹出的提示框的标题
jfc.showDialog(new JLabel(), "确定");
//用户选择的路径或文件
File file=jfc.getSelectedFile();
return file;
}
public static void main(String[] args){
AddPrefix ap = new AddPrefix();
ap.reName(ap.selectFilesAndDir());
}
}
效果:
重命名前
重命名后
祝:身体健康,工作学习顺利!