2013-05-19 4 views
3

Хорошо, я знаю, что это, вероятно, вопрос noobish, но я довольно новичок в Java, и, вероятно, будет довольно легко ответить. То, что я пытаюсь сделать, это сделать программу, которая будет использовать путь к файлу для открытия Firefox, но, похоже, проблема связана с файловым путем. Я провел некоторое исследование и использовал двойную косую черту, чтобы свести к минимуму escape-символы, но она по-прежнему не работает. Я думаю, что это связано с тем, что в некоторых именах каталогов есть пробелы. Вот мой код:Пробелы в пути к исполняемому файлу Java

import java.io.IOException; 

public class Automation { 

public static void main(String[] args) throws IOException { 
     Process p = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); 
    } 
} 

Я знаю его довольно простой, но я все еще не могу понять. Любая помощь приветствуется.

+0

Используйте «ProcessBuilder». – fge

ответ

1
"\"C:\\ .......\"" 

Таким образом, вы можете «убежать» от заготовок.

+0

Почему это недействительный ответ ??? – xtraclass

3
Process p = Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe\""); 

... или с Java 7 против Windows ...

String[] command = new String[] { 
    "C:" + 
    File.separator + 
    "Program Files (x86)" + 
    File.separator + 
    "Mozilla firefox" + 
    File.separator + 
    "firefox.exe"  
}; 
Process p = Runtime.getRuntime().exec(command); 
+1

Когда я это делаю, он говорит: «Исполняемое имя имеет встроенную цитату, разделяет аргументы» Не уверен, что это значит. – user2399735

+0

@Mena Вы уверены, что ваше решение работает? –

+0

@LakshithaRanasingha после двойной проверки, похоже, не работает со всеми версиями Java. А именно, это может быть неудачно в Java 7. Попробуйте этот пост для получения дополнительных альтернатив: http://stackoverflow.com/questions/2243993/how-to-execute-command-line-exe-file-in-java – Mena

1

Идеальное решение для вашей проблемы должно быть.

String [] cmds = new String [1]; 
cmds[0] = "C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe"; 
Process p = Runtime.getRuntime().exec(cmds); 

Это потому, что на самом деле Runtime.getRuntime().exec() не выполняет программу как переводчик командной строки делает. Поэтому вам нужно использовать массив параметров, когда у вас есть пробелы в пути. вы можете предоставить дополнительные флаги/параметры в этом массиве (например: open).

Это дополнительная информация. Насколько мне известно, Windows отлично справляется с косой чертой (/), потому что Windows API принимает обратную и обратную косые черты (начиная с MS DOS 2.0, я думаю). например, вы можете сделать dir "c:/Program Files (x86)" будет работать отлично, дайте вам список каталогов. Кроме того, без пробелов Process p = Runtime.getRuntime().exec("C:/SomeProgram/someprogram.exe"); отлично работает. Однако рекомендуется использовать разделитель файлов из среды. Это используется File.separator

+1

Это не совсем правильный ответ. Вы должны использовать «вокруг строки cmd, например в моем ответе выше. – xtraclass

+0

Действительно, вы запустили это? мой JVM не говорит об этом. Вам не нужно бежать, как вы сказали. Это реальный код, который выполняется в java 6 & 7. –

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