Java - Runtime.getRuntime (). Exec () что происходит? - PullRequest
3 голосов
/ 13 июня 2010

У меня проблема с Runtime.exec () в Java Мой код:

String lol = "/home/pc/example.txt";
String[] b = {"touch", lol}; 
try {  
    Runtime.getRuntime().exec(b);  
} catch(Exception ex) {  
    doSomething(ex);  
}

Работает хорошо, но при попытке изменить переменные "lol" файлы не создаются на жестком диске

например: String lol = x.getPath();, где getPath () возвращает строку

Что мне делать?

Спасибо за ваш ответ:)

Ответы [ 5 ]

5 голосов
/ 26 сентября 2013

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

   ProcessBuilder proc = new ProcessBuilder("<YOUR_DIRECTORY_PATH>" + "abc.exe"); // <your executable path> 
   proc.redirectOutput(ProcessBuilder.Redirect.INHERIT);  // 
   proc.directory(fi); // fi = your output directory
   proc.start();
1 голос
/ 13 июня 2010

Возможно, вы используете java.io.File
. В этом случае getPath() не возвращает абсолютный путь.Например:

System.out.println(System.getProperty("user.dir")); // Prints "/home/pc/"
// This means that all files with an relative path will be located in "/home/pc/"
File file = new File("example.txt");
// Now the file, we are pointing to is: "/home/pc/example.txt"
System.out.println(file.getPath()); // Prints "example.txt"
System.out.println(file.getAbsolutePath()); // Prints "/home/pc/example.txt"

Итак, вывод: используйте java.io.File.getAbsolutePath().

Совет: также существует метод java.io.File.getAbsoluteFile().Это вернет абсолютный путь при вызове getPath().


Я просто прочитал ваш комментарий к другому ответу:

Я думаю, что вы сделали:

String[] cmd = {"touch /home/pc/example.txt"};
Runtime.getRuntime().exec(cmd);

Это не сработает, потому что ОС ищет приложение под названием "touch /home/pc/example.txt".
Теперь вы думаете "WTF? Почему?"
Поскольку метод Runtime.getRuntime().exec(String cmd); разбивает вашу строку напространства.И Runtime.getRuntime().exec(String[] cmdarray); не разделяет это.Итак, вы должны сделать это самостоятельно:

String[] cmd = {"touch", "/home/pc/example.txt"};
Runtime.getRuntime().exec(cmd);
0 голосов
/ 04 января 2013

как написать код для реального пути

String path = request.getSession().getServletContext().getRealPath("/");

здесь вы можете получить реальный путь ..........

0 голосов
/ 13 июня 2010

Если код работает, когда вы устанавливаете строку в литерал "/home/pc/example.txt", а x.getPath также возвращает то же значение, тогда он ДОЛЖЕН работать - все так просто Это означает, что x.getPath () на самом деле возвращает что-то еще. Может быть, в строке есть пробел? Попробуйте сравнить строки напрямую:

if (!"/home/pc/example.txt".equals(x.getPath())) throw new RuntimeException();
0 голосов
/ 13 июня 2010

Просто посмотрите на содержание lol, когда вы позвонили x.getPath(). Я предполагаю, что это не абсолютный путь, и файл создается, но не там, где вы ожидаете.

Это x Java.io.File us getCanonicalPath() для абсолютного пути.

...