У меня есть особая потребность в удалении файлов, найденных в разных подкаталогах, во время выполнения моей программы на Os x.Я делаю это, вызывая бесплатный инструмент командной строки unrar, который работает очень хорошо.Тем не менее, unrar всегда будет разархивировать файлы в текущем рабочем каталоге, что означает, что я должен указать рабочий каталог для выполняемого процесса или получить каждый распакованный файл в моей домашней папке .jar.Это достаточно просто сделать с помощью processBuilder.directory (dir) или runTime.getRuntime().exec(args,null,dir)
, например, где dir - это файл.Это работает отлично, но не тогда, когда в рабочем каталоге есть пробел.В качестве короткого примера:
File dir=new File("/Users/chargedPeptide/rar 2");
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar", "2/weather.rar"};
Process pr = Runtime.getRuntime().exec(cmd,null,dir);
int exitValue=pr.waitFor();
Не будет работать, при использовании: Process pr = Runtime.getRuntime().exec(cmd);
вместо этого успешно запустит команду, но оставит меня со всеми файлами в рабочем каталоге jars.Вместо этого используйте processbuilder и p rocessbuilder.directory(dir);
для установки выхода из каталога с сообщением:
Exception: Cannot run program "/Users/chargedPeptide/rar/unrar" (in directory "/Users/chargedPeptide/rar 2"): error=2, No such file or directory
Help?Как мне справиться с пробелами?Я попытался добавить обратную косую черту перед пробелами, чтобы сделать их буквально бесполезными, поскольку объект File обрабатывает их как фактическую часть пути.
Редактировать: Чтобы сделать все немного более понятным: 1. У меня естьотдельный метод, который передает методу execute команду и каталог в processbuilder, все каталоги найдены предыдущим методом и существуют.Это работает за исключением случаев, когда каталог содержит пробел.2. Мне нужно установить рабочий каталог, иначе команда будет выполнена не в том месте.3.Парсинг файлового объекта с помощью: dir = new File (dir.tostring.replace ("", "\"); поместить обратную косую черту перед всеми пробелами не работает, поскольку объект File java затем ищет путь, содержащийфактическая обратная косая черта. Не повезло. 4. Использование rt.exec вместо processbuilder также не помогло.
Любые идеи, которые приветствуются.