Родительский родительский каталог в Java

Пожалуйста, объясните мне, почему, когда я запускаю этот код, все в порядке, и я получаю родительский каталог моих классов:

URL dirUrl = PathsService.class.getResource("..");

и когда я запускаю этот код:

URL dirUrl = PathsService.class.getResource("../..");

Я получаю null в dirUrl.

Я пробую вот так: URL dirUrl = PathsService.class.getResource("..//.."); все равно у меня есть null в dirUrl.

Как я могу получить родительский/родительский/родительский каталог в Java?

2 ответа

УВЕДОМЛЕНИЕ:

  • Как уже отмечалось ранее, использование любой функции при извлечении какого-либо родительского каталога - очень плохая идея дизайна (и тот, который почти наверняка терпит неудачу).
  • Если вы сообщаете более подробную информацию о том, чего вы пытаетесь достичь (общая картина), кто-то, вероятно, может предложить лучшее решение.

Тем не менее, вы можете попробовать следующий код:

import java.nio.file.*;
...
Path path = Paths.get(PathsService.class.getResource(".").toURI());
System.out.println(path.getParent()); // <-- Parent directory
System.out.println(path.getParent().getParent()); // <-- Parent of parent directory

Также обратите внимание, что вышеупомянутая техника может работать в вашей среде разработки, но может (и, вероятно, будет) давать неожиданные результаты, когда ваше приложение "правильно" развернуто.


Результат, который вы получаете, совершенно прав.

Я думаю, вы неправильно поняли использование class.getResource.

Допустим, что у вас есть пакет com.test и MyClass внутри этого пакета.

Этот MyClass.class.getResource(".") даст вам местоположение файла, из которого вы выполняете. Определяет местоположение MyClass.

Этот MyClass.class.getResource("..") переместится на 1 уровень вверх в вашей структуре пакета. Таким образом, это вернет расположение каталога test.

Этот MyClass.class.getResource("../..") будет идти дальше 1 уровень вверх. Таким образом, это вернет расположение каталога com.

Теперь этот MyClass.class.getResource("../../..") будет пытаться продвинуться дальше на 1 уровень вверх, но так как нет каталога пакетов, это вернет null.

Итак, class.getResource не будет выходить из определенной структуры пакета и начать доступ к вашему каталогу компьютера. Вот как это не работает. Это выполняется только в структуре текущей класса.

licensed under cc by-sa 3.0 with attribution.