sysLoader.getResource () проблема в Java - PullRequest
29 голосов
/ 16 июля 2010

У меня следующие строки кода.

sysLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader();
url = sysLoader.getResource("tempFile.txt");

Это создает странную проблему. Если я запускаю это из пути, где в нем нет места (имена папок), то он работает нормально. Но если путь содержит пробелы (строка «c: \ New Foler ...»), он не работает.

Как это решить?

РЕДАКТИРОВАТЬ: Более подробно - я осмотрел объект системного загрузчика.

системный загрузчик -> UCP -> путь

Имеет путь с символом% 20 вместо пробела

И, следовательно, все URL-адреса являются нулевыми.

Как решить эту проблему?

Ответы [ 3 ]

38 голосов
/ 20 ноября 2012

Это известно Sun / Oracle, их совет заключается в использовании объектов URI, которые будут удалять символы% 20:

Вместо этого:

FileInputStream fis = new FileInputStream(url.getFile());

Вы можете принудительно декодировать любые% -экранированные символы, сначала преобразовав URL-адрес в URI, а затем используйте компонент пути URI в качестве имени файла:

URI uri = new URI(url.toString());
FileInputStream fis = new FileInputStream(uri.getPath());
10 голосов
/ 19 февраля 2011

Используйте метод URLDecoder.decode() для замены %20 символов пробелами.

String path = URLDecoder.decode(url.getPath(), "UTF-8");

Также имейте в виду, что когда ресурс находится в файле JAR, вы должны обрабатывать егодругой путь.Посмотрите, например, здесь: Как получить доступ к ресурсам в jar, где он может присутствовать в нескольких jar

0 голосов
/ 13 апреля 2017

Чтобы получить URL-адрес файла из строки, когда путь содержит пробелы, для меня это сработало:

File file = new File("/Users/work space/tempFile.txt");
URL url = file.toURI().toURL();

Согласно Javadocs, file.toURL() равно устарело :

Этот метод автоматически не экранирует символы, которые являются недопустимыми в URL.Рекомендуется, чтобы новый код преобразовывал абстрактный путь в URL-адрес, сначала преобразовав его в URI с помощью метода toURI, а затем преобразовав URI в URL-адрес с помощью метода URI.toURL.

Следовательно, используется file.toURI().toURL().

Для Java 7+ этот подход можно использовать вместо:

URL url = Paths.get("/Users/work space/tempFile.txt").toURI().toURL());

Примечание : Если путь начинается с / это считается абсолютным, иначе как относительный путь.

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