Groovy переименовать файл

#file #groovy #io #file-rename

#файл #groovy #io #файл-переименовать

Вопрос:

Я пытаюсь переименовать файлы в каталоге с помощью 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
}
  

Когда я запускаю это, имена файлов не изменяются, как ожидалось. Мне интересно, как я мог заставить это работать.

Комментарии:

1. В чем проблема? Как это неожиданно меняет имя? Можете ли вы добавить пример имени файла и результат (и ожидаемый результат) к вопросу?

2. Имена файлов не изменяются вообще. Извините, если я был неясен

Ответ №1:

Здесь есть несколько ошибок:

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