#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:
Здесь есть несколько ошибок:
-
Ваша
dir
переменная — это не каталог; это файл внутри каталога, который вы на самом деле хотите изменить. Измените эту строку:dir.eachFile (FileType.FILES) { file ->
для этого:
dir.parentFile.eachFile (FileType.FILES) { file ->
-
renameTo
Метод не переименовывает локальное имя (я знаю, это очень нелогично), он переименовывает путь. Поэтому измените следующее:String newName = file.name
для этого:
String newName = file.path
-
Теперь, по какой-то непонятной мне причине, все
println file.name
еще выводится старое имя. Однако, если вы посмотрите на фактические послесловия каталога, вы увидите, что файл правильно переименован в каталоге.