Программирование на Java: вызов exe из Java и передача параметров
Я выясняю механизм вызова exe из Java и передачи конкретных параметров. Как я могу сделать?
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:", Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Предыдущий код работает. Но я не могу передать параметры. MyExe.exe принимает параметры. Другая проблема - когда у PathToExe есть пробелы. ProcessBuilder, кажется, не работает. Например:
C:\\User\\My applications\\MyExe.exe
Спасибо.
5 ответов
Передайте свои аргументы в самом конструкторе.
Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Вы на правильном пути. Два конструктора принимают аргументы, или вы можете указать их после построения с помощью ProcessBuilder#command(java.util.List)
а также ProcessBuilder#command(String...)
,
Ниже работает для меня, если ваш exe зависит от какой-то DLL или определенной зависимости, то вам нужно установить путь к каталогу. Как упомянуто ниже, exePath означает папку, в которой exe размещен вместе с его ссылочными файлами.
Exe-приложение, создающее любой временный файл, поэтому оно будет создано в папке, упомянутой в processBuilder.directory (...)
**
ProcessBuilder processBuilder = new ProcessBuilder(arguments);
processBuilder.redirectOutput(Redirect.PIPE);
processBuilder.directory(new File(exePath));
process = processBuilder.start();
int waitFlag = process.waitFor();// Wait to finish application execution.
if (waitFlag == 0) {
...
int returnVal = process.exitValue();
}
**
import java.io.IOException;
import java.lang.ProcessBuilder;
public class handlingexe {
public static void main(String[] args) throws IOException {
ProcessBuilder p = new ProcessBuilder();
System.out.println("Started EXE");
p.command("C:\\Users\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");
p.start();
System.out.println("Started EXE");
}
}
Я построил утилиту для того же самого, очень простого.
public class CallOsExeUtil {
public static String call(String[] args) throws IOException, InterruptedException {
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = processBuilder.start();
int waitFlag = process.waitFor();// Wait to finish application execution.
StringBuilder sb = new StringBuilder("");
if (waitFlag == 0) {
if (process.exitValue()==0) {
System.out.println("This is me " + process.info());
BufferedInputStream in = (BufferedInputStream) process.getInputStream();
byte[] contents = new byte[1024];
int bytesRead = 0;
while ((bytesRead = in.read(contents)) != -1) {
sb.append(new String(contents, 0, bytesRead));
}
}
}
return sb.toString();
}
}