天天看點

用Java對檔案進行重命名

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