2016-09-30 36 views
3

我想重命名使用Groovy的目錄中的文件,但我似乎無法理解它是如何工作的。Groovy重命名一個文件

這裏是我的腳本:

import groovy.io.FileType 

def dir = new File("C:/Users/דודו/Downloads/Busta_Rhymes-Genesis-(Retail)-2001-HHI") 

def replace = { 
    if (it == '_') { 
     ' ' 
    } 
} 

String empty = "" 

dir.eachFile (FileType.FILES) { file -> 
    String newName = file.name 
    newName = newName.replaceAll(~/Busta_Rhymes/, "$empty") 
    newName = newName.replaceAll(~/feat/, "ft") 
    newName = newName.replaceAll(~/-HHI/, "$empty") 
    newName = newName.replaceAll(~/--/, "-") 

    newName = newName.collectReplacements(replace) 

    file.renameTo newName 

    println file.name 
} 

當我運行這一點,因爲預期的文件的名稱不會改變。我想知道如何才能讓這個工作。

+0

什麼問題?它如何突然改變這個名字?你可以添加一個示例文件名和結果(和預期的結果)的問題? –

+0

文件的名稱完全沒有改變。如果我不清楚,我很抱歉 –

回答

3

有許多事情錯在這裏:

  1. dir變量不是目錄;它是您實際想要更改的目錄內的文件。改變這一行:

    dir.eachFile (FileType.FILES) { file -> 
    

    這樣:

    dir.parentFile.eachFile (FileType.FILES) { file -> 
    
  2. renameTo方法不重命名的本地名稱(我知道,非常違反直覺),它重命名的路徑。所以改變如下:

    String newName = file.name 
    

    這樣:

    String newName = file.path 
    
  3. 現在,由於某種原因,我無法理解,println file.name仍然打印出舊名稱。 但是,如果您查看實際目錄後綴,則會看到文件在目錄中正確地重命名。