2013-02-27 2 views
3

Я знаю, что есть много решаемых вопросов относительно выполнения процессов из java. Но я не могу решить свою проблему, используя предоставленные ответы. Я пытаюсь создать резервную копию базы данных postgresql из приложения java. Я использую следующий кодJava ProcessBuilder с несколькими параметрами с пробелами

 //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:/PostgreSQL 8.2/bin/pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:/backup test/backups/test_27-1-2013_210.backup", "test"}); 
     //ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"}); 
     ProcessBuilder probuilder = new ProcessBuilder(new String[]{"cmd","/c","\"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe\"","-U","usr","-i","-h","localhost","-p","5432","-F","c","-b","-f","\"D:\\backup test\\backups\\test_27-1-2013_210.backup\"", "test"}); 
     Map<String, String> env = probuilder.environment(); 
     env.put("PGPASSWORD", "mypass"); 

     final Process process = probuilder.start(); 

После выполнения выше кода я получаю следующее сообщение об ошибке: D:\PostgreSQL' is not recognized as an internal or external command, operable program or batch file.

Проблема встречается, только тогда, когда путь к файлу резервной копии содержит пробелы создается в противном случае резервное копирование. Я попытался использовать как слэш, так и обратную косую черту в пути к файлу, и я процитировал путь к файлу, но каждый раз получаю ту же ошибку. Команда может быть выполнена из командной строки.

Что я делаю неправильно. Существуют ли некоторые ограничения относительно количества параметров с пробелами в ProcessBuilder.

ответ

5

С pg_dump.exe - exe (не .bat), вам не нужен вообще cmd, и это, вероятно, вызывает больше проблем, чем решает. Просто позвоните непосредственно exe и удалите дополнительный набор котировок вокруг путей файла:

new String[]{"D:\\PostgreSQL 8.2\\bin\\pg_dump.exe","-U","usr","-i", 
    "-h","localhost","-p","5432","-F","c","-b", 
    "-f","D:\\backup test\\backups\\test_27-1-2013_210.backup", "test"} 
+0

Вы - мужчина. Это вызвало проблему. Большое спасибо – user2115093

+0

@ user2115093 спасибо, и добро пожаловать в переполнение стека. Когда вы получите ответ, который решает вашу проблему, это хорошие манеры для _accept_, нажав на отметку слева. Создание послужной список для принятия хороших ответов - это способ побудить больше людей помочь с вашими будущими вопросами. –

+0

Я планировал это сделать, но я не мог найти сначала, где мне нужно щелкнуть. еще раз спасибо – user2115093

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