Java - найти jar-файл класса (или каталог классов) - PullRequest
0 голосов
/ 20 июня 2020

Я могу запросить URL-адрес для файла jar или каталога классов, где Java загружает класс из:

Class clazz = ...
URL url = clazz.getProtectionDomain().getCodeSource().getLocation();

, но как правильно преобразовать его в File (или Path) - особенно в отношении некоторых символов пути в URL-адресах? Я пробовал это:

String fileName = URLDecoder.decode(url.getFile(), "UTF-8");
File jarFileOrClassesDir = new File(fileName);

, но это вызывает проблемы, если внутри пути есть + (+ заменяется пробелом).

1 Ответ

1 голос
/ 20 июня 2020
but this causes problems if there is a + inside the path (the + is replaced with a space).

Это стандартное поведение URLDecoder. См. Дополнительную информацию в JavaDo c [1], плюс (+) также упоминается там.

Решение с использованием Paths

Использование Paths#get(URI) [2] должно сохранять все "специальные" символы, и вы можете передать напрямую URI, которое можно получить напрямую из URL, используя URL#toURI() [3].

Итак, в итоге:

final var filePath = Paths.get(url.toURI()); // We can extract any information from Path e.g. fileName.

shoud работать как положено.

[1] https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/URLDecoder.html

[2] https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/Paths.html#get (java. net .URI)

[3] https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/URL.html#toURI ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...