2014-12-02 2 views
1

Я пытаюсь выполнить процесс в том же каталоге, что и мой файл Jar, получая местоположение файла сRuntime.exec() терпит неудачу с пространством в каталоге (Java)

private static File jarLocation = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile(); 

затем вызывая

Это обычно работает нормально, но когда путь имеет пробел, я получаю «Недопустимое имя каталога». Я попытался добавить некоторый отладочный код, который печатает путь к каталогу, который заменил пробелы «% 20» (я предполагаю, что гексагон ASCII пространства равен 20). есть ли способ использовать каталог с пробелами на своем пути?

+0

замена% 20 назад в фактическое пространство должно работать. Они являются результатом кодирования URL. Изменить: см. Http://stackoverflow.com/a/12733172/995891 – zapl

+0

Можете ли вы включить полную ошибку, которую вы получаете, включая трассировку стека? На какой ОС вы работаете? И фактическая строка 'command'? Он обозначается в этой форме Runtime.exec(), поэтому там могут быть проблемы. –

+0

@AndrewJanke Команда, с которой я работаю, не имеет никакого значения. Я попробовал это как на Windows 7, так и на Linux (Ubuntu), и это тоже не имеет никакого значения. Я просто передаю строку для команды. – user2248702

ответ

1

Этот getPath() вызов, который равен URL.getPath(), не возвращает путь к файловой системе. Он возвращает часть пути URL-адреса. В случае URL-адреса file: это будет путь локальной файловой системы, закодированный URL-адресами. Если этот исходный URL на самом деле является URL-адресом file:, вам необходимо использовать классы URI и URL или настраивать строчную обработку, чтобы преобразовать их в путь локальной файловой системы, с которым может работать Runtime.exec().

Это может работать прямо в вашем случае.

File jarLocation = Paths.get(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()).toFile(); 

Вы также можете ознакомиться с обсуждением на форуме Converting Java file:// URL to File(...) path, platform independent, including UNC paths.

Смежные вопросы