Java.io.File.plus () применимо для типов аргументов: (java.lang.String) value: [\] в Ready API

У меня есть следующий сценарий 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 вызывает это исключение?

он работает нормально. По крайней мере, код, который я могу понять из вашего вопроса. Вы просто добавляете туда строки.

Veselin Davidov 12.04.2018 08:48

На самом деле я использую инструмент Ready API. Там вроде какая-то проблема

avidCoder 12.04.2018 08:52

Я получаю эту ошибку в готовом 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 () »

avidCoder 12.04.2018 08:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
3
5 704
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Когда вы используете оператор +, 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

Спасибо за объяснение проблемы.

avidCoder 12.04.2018 08:59

Поскольку dir относится к типу File, а File не имеет метода plus(String).

Ты наверное хочешь

String fullpath = dir.path + "\\" + fileName

И если вы когда-нибудь захотите использовать его на других платформах, кроме Windows:

String fullpath = dir.path + File.separator + fileName

Вы также можете взглянуть на Path.join(), который объясняется в другой ответ

Другие вопросы по теме