У меня есть следующий сценарий Groovy, в котором я пытаюсь получить имя каталога и имя файла:
File dir = new File("C://Users//avidCoder//Project")
log.info dir //Fetching the directory path
String fileName = "Demo_Data" + ".json"
log.info fileName //Fetching the file name
String fullpath = dir + "\\" + fileName
log.info fullpath //Fetching the full path gives error
Однако когда я запускаю его, я получаю следующее исключение:
"java.io.File.plus() is applicable for arguments type"
Почему создание переменной fullpath вызывает это исключение?
На самом деле я использую инструмент Ready API. Там вроде какая-то проблема
Я получаю эту ошибку в готовом API - "groovy.lang.MissingMethodException: Нет сигнатуры метода: java.io.File.plus () не применима для типов аргументов: (java.lang.String) values: [] Возможные решения: list (), list (java.io.FilenameFilter), split (groovy.lang.Closure), используйте ([Ljava.lang.Object;), is (java.lang.Object), wait () »




Когда вы используете оператор +, Groovy берет левую часть выражения и пытается вызвать метод .plus(parameter), где parameter - правая часть выражения. Это означает, что выражение
dir + "\\" + fileName
эквивалент:
(dir.plus("\\")).plus(filename)
Переменная dir в вашем примере - File, поэтому компилятор пытается найти такой метод, как:
File.plus(String str)
и этого метода не существует, и вы получаете:
Caught: groovy.lang.MissingMethodException: No signature of method: java.io.File.plus() is applicable for argument types: (java.lang.String) values: [\]
Если вы хотите создать строку типа String fullpath = dir + "\\" + fileName, вам нужно будет получить строковое представление переменной dir, например. dir.path возвращает строку, представляющую полный путь к файлу:
String fullpath = dir.path + "\\" + fileName
Спасибо за объяснение проблемы.
Поскольку dir относится к типу File, а File не имеет метода plus(String).
Ты наверное хочешь
String fullpath = dir.path + "\\" + fileName
И если вы когда-нибудь захотите использовать его на других платформах, кроме Windows:
String fullpath = dir.path + File.separator + fileName
Вы также можете взглянуть на Path.join(), который объясняется в другой ответ
он работает нормально. По крайней мере, код, который я могу понять из вашего вопроса. Вы просто добавляете туда строки.