昨天闲来无事,对磁盘进行了整理。当整理到F盘(放的都是电影之类的)时发现好多电影文件名字前面都有一些标识,我经常在电影天堂上下载电影,所以下载的电影名前面都会有[电影天堂www.dy2018.com]、[电影天堂www.dy2018.net]等字样,感觉很不爽。于是我就想把这些字样去掉,可是程序猿都有一些懒,我也不例外,那么多懒得一个个删除,又懒得去网上找那些批量修改文件名的软件,就想到写个程序。于是,我就开始敲代码了。
首先分析文件名:
通过比较发现都是类似“[电影天堂www.dy2018.com]”的样式,大多数文件名中电影天堂的标识是在开头,有一部分是在最后(也就是文件扩展名之前)。而且在标识前后有的有一个“."字符来分割文件名和标识。
举例说明:
[电影天堂www.dy2018.com]活在当下.720p.BD中英双字幕.rmvb
[电影天堂www.dy2018.com].活在当下.720p.BD中英双字幕.rmvb
活在当下.720p.BD中英双字幕.[电影天堂www.dy2018.com].rmvb
写程序时多考虑了一下,比如说标识在文件名中间(活在当下.720p.[电影天堂www.dy2018.com].BD中英双字幕.rmvb)。
通过以上分析,发现标识都包含dy2018字样,标识前后有字符点。
解决思路:
获取文件名,判断是否含有dy2018标识,截取”[“之前和”]“之后的字符串,并拼接成一个新的文件名
代码如下:
import java.io.File; public class ClearDy2018 { public static void main(String[] args) { File file = new File("F://"); File files[] = file.listFiles(); for(File f : files) { if(f.isFile()) {//获取F盘下的所有文件(我的电影全在根目录下) if(f.getName().matches("\\S*dy2018\\S*")) {//正则判断是否含有dy2018标识 StringBuilder filename = new StringBuilder(); int begin = f.getName().indexOf(‘[‘); int end = f.getName().indexOf(‘]‘); //begin不等于0说明标识不再文件名的开头 if(begin!=0) { filename.append(f.getName().substring(0,begin-1)); } else { filename.append(f.getName().substring(0,begin)); } //此时说明标识在文件名的最后,紧跟着文件扩展名 if(end==f.getName().lastIndexOf(".")-1) { //注意此时截取字符串开始索引是end+1,因为‘]’之后的点是跟扩展名一起的。文件名"幕.rmvb"会变成"幕rmvb" filename.append(f.getName().substring(end+1)); } else { //这时文件名中会有一个多余的点字符,要去掉 filename.append(f.getName().substring(end+2)); } //对文件重命名 File newFile = new File(f.getParent()+File.separator+filename.toString()); f.renameTo(newFile); System.out.println(f.getName()+"==>"+newFile.getName());//输出文件改名前后变化 } } } } }