2016-09-30 6 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еще распечатывает старое название. Однако, если вы посмотрите на фактические пароли, вы увидите, что файл правильно переименован в каталог.

Смежные вопросы