Resolve java что это
Перейти к содержимому

Resolve java что это

  • автор:

Resolve java что это

A Path экземпляр содержит информацию, используемую, чтобы определить расположение файла или каталога. В то время, когда это определяется, a Path предоставляется серию одного или более имен. Корневой элемент или имя файла могли бы быть включены, но ни один не требуется. A Path мог бы состоять из только единственного каталога или имени файла.

Можно легко создать a Path объект при использовании одного из следующих get методы от Paths (отметьте множественное число), помощник class:

Path p1 = Paths.get("/tmp/foo"); Path p2 = Paths.get(args[0]); Path p3 = Paths.get(URI.create("file:///Users/joe/FileTest.java"));

Paths.get метод является сокращением для следующего кода:

Path p4 = FileSystems.getDefault().getPath("/users/sally");

Следующий пример создает /u/joe/logs/foo.log принятие Вашего корневого каталога /u/joe , или C:\joe\logs\foo.log если Вы находитесь на Windows.

Path p5 = Paths.get(System.getProperty("user.home"),"logs", "foo.log");

Получение информации о Пути

Можно думать Path как хранящий эти элементы имени как последовательность. Самый высокий элемент в структуре каталогов был бы расположен в, индексируют 0. Самый низкий элемент в структуре каталогов был бы расположен в, индексируют [n-1] , где n число элементов имени в Path . Методы доступны для получения отдельных элементов или подпоследовательности Path использование их индексирует.

Примеры в этом уроке используют следующую структуру каталогов.

Демонстрационная Структура каталогов

Следующий фрагмент кода определяет a Path экземпляр и затем вызывает несколько методов, чтобы получить информацию о пути:

// None of these methods requires that the file corresponding // to the Path exists. // Microsoft Windows syntax Path path = Paths.get("C:\\home\\joe\\foo"); // Solaris syntax Path path = Paths.get("/home/joe/foo"); System.out.format("toString: %s%n", path.toString()); System.out.format("getFileName: %s%n", path.getFileName()); System.out.format("getName(0): %s%n", path.getName(0)); System.out.format("getNameCount: %d%n", path.getNameCount()); System.out.format("subpath(0,2): %s%n", path.subpath(0,2)); System.out.format("getParent: %s%n", path.getParent()); System.out.format("getRoot: %s%n", path.getRoot());

Вот вывод и для Windows и для Соляриса ОС:

Вызванный метод Возвраты в Солярисе ОС Возвраты в Microsoft Windows Комментарий
toString /home/joe/foo C:\home\joe\foo Возвращает строковое представление Path . Если путь создавался, используя Filesystems.getDefault().getPath(String) или Paths.get (последний является методом удобства для getPath ), метод выполняет незначительную синтаксическую уборку. Например, в операционной системе UNIX, это исправит строку ввода //home/joe/foo к /home/joe/foo .
getFileName foo foo Возвращает имя файла или последний элемент последовательности элементов имени.
getName(0) home home Возвращается элемент пути, соответствующий указанному, индексируют. 0th элемент является элементом пути, самым близким к корню.
getNameCount 3 3 Возвращает число элементов в пути.
subpath(0,2) home/joe home\joe Возвращает подпоследовательность Path (не включая корневой элемент), как определено к началу и окончанию индексирует.
getParent /home/joe \home\joe Возвращает путь родительского каталога.
getRoot / C:\ Возвращает корень пути.

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

// Solaris syntax Path path = Paths.get("sally/bar"); or // Microsoft Windows syntax Path path = Paths.get("sally\\bar");

Вот является вывод для Windows и Соляриса ОС:

Вызванный метод Возвраты в Солярисе ОС Возвраты в Microsoft Windows
toString sally/bar sally\bar
getFileName bar bar
getName(0) sally sally
getNameCount 2 2
subpath(0,1) sally sally
getParent sally sally
getRoot null null

Удаление Избыточности От Пути

Много файловых систем используют «.» нотацию, чтобы обозначить текущий каталог и «..» обозначить родительский каталог. У Вас могла бы быть ситуация где a Path содержит избыточную информацию о каталоге. Возможно, сервер конфигурируется, чтобы сохранить его файлы журнала в» /dir/logs/. «каталог, и Вы хотите удалить запаздывание» /. «нотация от пути.

Следующие примеры оба включают избыточность:

/home/./joe/foo /home/sally/../joe/foo

normalize метод удаляет любые избыточные элементы, который включает любого» . «или» directory/.. «возникновения. Оба из предыдущих примеров нормализуют к /home/joe/foo .

Важно отметить это normalize не проверяет в файловой системе, когда она очищает путь. Это — просто синтаксическая работа. Во втором примере, если sally была символьная ссылка, удаляя sally/.. мог бы привести к a Path это больше не определяет местоположение намеченного файла.

Чтобы очистить путь, гарантируя, что результат определяет местоположение корректного файла, можно использовать toRealPath метод. Этот метод описывается в следующем разделе, Преобразовывая Путь.

Преобразование Пути

Можно использовать три метода, чтобы преобразовать Path . Если Вы должны преобразовать путь к строке, которая может быть открыта от браузера, можно использовать toUri . Например:

Path p1 = Paths.get("/home/logfile"); // Result is file:///home/logfile System.out.format("%s%n", p1.toUri());

toAbsolutePath метод преобразовывает путь к абсолютному пути. Если переданный — в пути является уже абсолютным, он возвращает то же самое Path объект. toAbsolutePath метод может быть очень полезным, обрабатывая вводимые пользователем имена файлов. Например:

public class FileTest < public static void main(String[] args) < if (args.length < 1) < System.out.println("usage: FileTest file"); System.exit(-1); >// Converts the input string to a Path object. Path inputPath = Paths.get(args[0]); // Converts the input Path // to an absolute path. // Generally, this means prepending // the current working // directory. If this example // were called like this: // java FileTest foo // the getRoot and getParent methods // would return null // on the original "inputPath" // instance. Invoking getRoot and // getParent on the "fullPath" // instance returns expected values. Path fullPath = inputPath.toAbsolutePath(); > >

toAbsolutePath метод преобразовывает ввод данных пользователем и возвращает a Path это возвращает полезные значения когда запрошено. Файл не должен существовать для этого метода, чтобы работать.

toRealPath метод возвращает реальный путь существующего файла. Этот метод выполняет несколько операций в одном:

  • Если true передается к этому методу, и файловая система поддерживает символьные ссылки, этот метод разрешает любые символьные ссылки в пути.
  • Если Path относительно, это возвращает абсолютный путь.
  • Если Path содержит любые избыточные элементы, это возвращает путь с теми удаленными элементами.

Этот метод выдает исключение, если файл не существует или не может быть получен доступ. Можно поймать исключение, когда Вы хотите обработать любой из этих случаев. Например:

try < Path fp = path.toRealPath(true); >catch (NoSuchFileException x) < System.err.format("%s: no such" + " file or directory%n", path); // Logic for case when file doesn't exist. >catch (IOException x) < System.err.format("%s%n", x); // Logic for other sort of file error. >

Присоединение к Двум Путям

Можно объединить пути при использовании resolve метод. Вы передаете в частичном пути, который является путем, который не включает корневой элемент, и что частичный путь добавляется к исходному пути.

Например, рассмотрите следующий фрагмент кода:

// Solaris Path p1 = Paths.get("/home/joe/foo"); // Result is /home/joe/foo/bar System.out.format("%s%n", p1.resolve("bar")); or // Microsoft Windows Path p1 = Paths.get("C:\\home\\joe\\foo"); // Result is C:\home\joe\foo\bar System.out.format("%s%n", p1.resolve("bar"));

Передача абсолютного пути к resolve метод возвращает переданный — в пути:

// Result is /home/joe Paths.get("foo").resolve("/home/joe");

Создание Пути Между Двумя Путями

Общее требование, когда Вы пишете код файлового ввода-вывода, является возможностью создать путь из одного расположения в файловой системе к другому расположению. Можно встретить это использование relativize метод. Этот метод создает путь, происходящий из исходного пути и заканчивающийся в расположении, определенном переданным — в пути. Новый путь относительно исходного пути.

Например, считайте два относительных пути определенными как joe и sally :

Path p1 = Paths.get("joe"); Path p2 = Paths.get("sally");

В отсутствие любой другой информации это принимается это joe и sally одноуровневые элементы, означая узлы, которые находятся на том же самом уровне в древовидной структуре. Перемещаться от joe к sally , Вы ожидали бы сначала перемещаться по одному уровню до родительского узла и затем вниз к sally :

// Result is ../sally Path p1_to_p2 = p1.relativize(p2); // Result is ../joe Path p2_to_p1 = p2.relativize(p1);

Рассмотрите немного более сложный пример:

Path p1 = Paths.get("home"); Path p3 = Paths.get("home/sally/bar"); // Result is sally/bar Path p1_to_p3 = p1.relativize(p3); // Result is ../.. Path p3_to_p1 = p3.relativize(p1);

В этом примере эти два пути совместно используют тот же самый узел, home . Перемещаться от home к bar , Вы сначала перемещаетесь, каждый уравнивает к sally и затем еще один уравнивать к bar . Навигация от bar к home требует перемещающийся вверх два уровня.

Относительный путь не может быть создан, если только один из путей включает корневой элемент. Если оба пути включают корневой элемент, возможность создать относительный путь системно-зависима.

Рекурсивное Copy пример использует relativize и resolve методы.

Сравнение Двух Путей

Path class поддерживает equals , то, чтобы позволять Вам протестировать два пути на равенство. startsWith и endsWith методы позволяют Вам протестировать, начинается ли путь или заканчивается определенной строкой. Эти методы удобны. Например:

Path path = . ; Path otherPath = . ; Path beginning = Paths.get("/home"); Path ending = Paths.get("foo"); if (path.equals(otherPath)) < // equality logic here > else if (path.startsWith(beginning)) < // path begins with "/home" > else if (path.endsWith(ending)) < // path ends with "foo" >

Path class реализует Iterable интерфейс. iterator метод возвращает объект, который позволяет Вам выполнить итерации по элементам имени в пути. Первый возвращенный элемент то, что самым близким к корню в дереве каталогов. Следующий фрагмент кода выполняет итерации по пути, печатая каждый элемент имени:

Path path = . ; for (Path name: path)

Path class также реализует Comparable интерфейс. Можно сравниться Path объекты при использовании compareTo который полезен для сортировки.

Можно также поместить Path объекты в a Collection . См., что Наборы запаздывают для получения дополнительной информации об этой мощной функции.

Когда Вы хотите проверить это два Path объекты определяют местоположение того же самого файла, можно использовать isSameFile метод, как описано в Проверке, определяют Ли Два Пути Местоположение Того же самого Файла.

Ваше использование этой страницы и всего материала на страницах под «Учебным баннером» Java подвергается этим официальным уведомлениям.

Авторское право © 1995, 2012 Oracle и/или его филиалы. Все права защищены.

Решение проблемы «Cannot resolve symbol» в IntelliJ IDEA

В разработке на Java возникает множество типичных проблем, одна из которых — ошибка «Cannot resolve symbol» в среде разработки IntelliJ IDEA. Эта ошибка возникает, когда среда разработки не может найти определенный класс или метод, который используется в коде. Часто это происходит при добавлении новых зависимостей в проект.

Пример проблемы

Возьмем для примера Maven проект, в котором добавлена зависимость log4j. Все работает отлично, код компилируется и созданные юнит-тесты выполняются без ошибок.

Затем в этот проект добавляется новая зависимость — библиотека jmime. После этого IntelliJ IDEA начинает выдавать ошибку «Cannot resolve symbol» для всех классов и методов из этой библиотеки. При этом код все равно успешно компилируется и выполняется.

Возможные причины

Такое поведение IntelliJ IDEA может быть вызвано несколькими причинами:

  1. Библиотека jmime не была корректно добавлена в проект. В этом случае IntelliJ IDEA не может найти классы и методы из этой библиотеки и, следовательно, не может разрешить символы.
  2. В настройках среды разработки задан неправильный путь к JDK. IntelliJ IDEA использует JDK для компиляции кода, и если путь к JDK задан неверно, то среда разработки не сможет компилировать код.
  3. Проект содержит ошибки в коде, которые мешают IntelliJ IDEA правильно анализировать код и разрешать символы.

Решение проблемы

Чтобы решить проблему «Cannot resolve symbol» в IntelliJ IDEA, можно применить следующие шаги:

  1. Проверить, что библиотека jmime корректно добавлена в проект. Для этого нужно открыть файл pom.xml и убедиться, что в нем присутствует соответствующая зависимость.
  2. Проверить, что в настройках IntelliJ IDEA задан правильный путь к JDK. Для этого нужно перейти в настройки среды разработки (File -> Project Structure -> Project SDK) и убедиться, что выбран правильный JDK.
  3. Проверить код проекта на наличие ошибок. Если код содержит ошибки, то IntelliJ IDEA может неверно анализировать код и выдавать ошибку «Cannot resolve symbol».
  4. Если все вышеуказанные шаги не помогли, то можно попробовать переиндексировать проект в IntelliJ IDEA. Для этого нужно выбрать пункт меню File -> Invalidate Caches / Restart, а затем нажать кнопку «Invalidate and Restart».

Эти шаги помогут решить проблему «Cannot resolve symbol» в IntelliJ IDEA и продолжить разработку без препятствий.

Ошибка «Cannot find symbol» или «Cannot resolve symbol» в Java

Ошибка «Cannot find symbol» или «Cannot resolve symbol» — это типичная ошибка компиляции в языке программирования Java. Эта ошибка возникает, когда компилятор не может найти символ, который был указан в коде. Символом может быть класс, метод, переменная и т.д.

Пример проблемы

Возьмем для примера следующий фрагмент кода:

public class HelloWorld < public static void main(String[] args) < System.out.prtln("Hello, World!"); >>

Здесь мы видим, что вместо метода println был указан prtln . В результате компилятор выдает ошибку Cannot find symbol , поскольку не может найти метод prtln .

Причины ошибок

Ошибки «Cannot find symbol» или «Cannot resolve symbol» могут быть вызваны различными причинами. Вот некоторые из наиболее распространенных:

  1. Опечатка в имени метода или переменной, как в приведенном выше примере.
  2. Использование неопределенной переменной или метода.
  3. Недостаток импорта необходимого класса или пакета.
  4. Использование класса или метода, который не доступен в текущей области видимости.

Решение проблемы

Решение проблемы с ошибкой «Cannot find symbol» или «Cannot resolve symbol» в значительной степени зависит от конкретной причины. В большинстве случаев следующие шаги помогут устранить ошибку:

  1. Проверить наличие опечаток в именах методов, классов и переменных.
  2. Убедиться, что все необходимые классы и пакеты были импортированы.
  3. Проверить, что используемый класс или метод доступен в текущей области видимости.
  4. Если ошибка связана с неопределенной переменной или методом, убедиться, что они были правильно определены и инициализированы.

Возвращаясь к нашему примеру, ошибка может быть исправлена путем исправления опечатки в имени метода, как показано ниже:

public class HelloWorld < public static void main(String[] args) < System.out.println("Hello, World!"); >>

В итоге, принимая во внимание все вышеуказанное, при возникновении ошибки «Cannot resolve symbol» или «Cannot find symbol» важно внимательно проверить код, чтобы устранить причину ошибки и обеспечить успешную компиляцию программы.

Что значит ошибка cannot resolve method?

Всем привет. Думаю, в заголовке все понятно. В коде в нескольких местах пишет данную ошибку, хотя нужные методы есть, использую Forge API.

Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 26 мар 2015 в 6:39
1 1 1 серебряный знак 1 1 бронзовый знак

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Ошибка значит ровно то, о чем сообщает: компилятор не может найти метод с аргументами нужного типа.

Отслеживать
ответ дан 26 мар 2015 в 11:56
13.1k 1 1 золотой знак 28 28 серебряных знаков 28 28 бронзовых знаков

  • api
  • java
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *