[英]How to use Runtime.getRuntime().exec to run an arbitrary Java program?
I found the following code which uses Runtime.getRuntime().exec
to run an arbitrary program (like Notepad.exe ) . 我发现以下代码使用
Runtime.getRuntime().exec
运行任意程序(例如Notepad.exe)。
public class RuntimeDemo {
public static void main(String[] args) {
try {
// create a new array of 2 strings
String[] cmdArray = new String[2];
// first argument is the program we want to open
cmdArray[0] = "notepad.exe";
// second argument is a txt file we want to open with notepad
cmdArray[1] = "example.txt";
// print a message
System.out.println("Executing notepad.exe and opening example.txt");
// create a process and execute cmdArray and currect environment
Process process = Runtime.getRuntime().exec(cmdArray,null);
// print another message
System.out.println("example.txt should now open.");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
I ran this from Eclipse, and it opens Notepad.exe (or I can use calc.exe also ) . 我是从Eclipse运行的,它会打开Notepad.exe(或者也可以使用calc.exe)。
But what if we want to run an arbitrary Java command from this program, something like : 但是,如果我们想从该程序运行一个任意的Java命令怎么办?
java -version
- java -version
-
will this run? 会跑吗? I see a problem here is that .. where do you see the results of it?
我在这里看到一个问题是..您在哪里看到它的结果? If I'm running command-line, it comes out to the command line.. but here?
如果我正在运行命令行,它将显示在命令行中。
ProcessBuilder
of Runtime#exec
, it provides a more configurable solution and encourages the use of String[]
or List<String>
for the commands and parameters, which solves a bunch of issues, especially when your parameters contain spaces. Runtime#exec
ProcessBuilder
,它提供了更可配置的解决方案,并鼓励在命令和参数中使用String[]
或List<String>
,这解决了很多问题,尤其是当您的参数包含空格时。 Process
's InputStream
Process
的InputStream
For example... 例如...
try {
String[] command = {"java.exe", "-?"};
ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true);
Process exec = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(exec.getInputStream()));
String text = null;
while ((text = br.readLine()) != null) {
System.out.println(text);
}
System.out.println("Process exited with " + exec.waitFor());
} catch (IOException | InterruptedException exp) {
exp.printStackTrace();
}
Which outputs 哪个输出
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-d32 use a 32-bit data model if available
-d64 use a 64-bit data model if available
-server to select the "server" VM
The default VM is server.
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
-D<name>=<value>
set a system property
-verbose:[class|gc|jni]
enable verbose output
-version print product version and exit
-version:<value>
require the specified version to run
-showversion print product version and continue
-jre-restrict-search | -no-jre-restrict-search
include/exclude user private JREs in the version search
-? -help print this help message
-X print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
disable assertions with specified granularity
-esa | -enablesystemassertions
enable system assertions
-dsa | -disablesystemassertions
disable system assertions
-agentlib:<libname>[=<options>]
load native agent library <libname>, e.g. -agentlib:hprof
see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.
Process exited with 0
This assumes that java.exe
is within the PATH
environment, otherwise you may be required to provide the full path to it (or change the working directory) 这假定
java.exe
在PATH
环境中,否则可能需要您提供它的完整路径(或更改工作目录)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.