昨天閑來無事,對磁盤進行了整理。當整理到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());//輸出檔案改名前後變化
}
}
}
}
}