方式一:java.lang.Runtime
执行系统“whoami” 命令并返回结果
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class ExecDemo {
public static void main(String[] args) throws IOException {
// Runtime 命令执行 java.lang.Runtime
InputStream in =Runtime.getRuntime().exec("whoami").getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] b = new byte[1024];
int a = -1;
while ((a = in.read(b))!= -1){
byteArrayOutputStream.write(b,0,a);
}
System.out.println(byteArrayOutputStream.toString());
}
}
exec —> ProcessBuilder --> ProcessImpl.start --> ProcessImpl.create
方法二:利用反射调用Runtime
方法三:利用 ProcessBuilder
new ProcessBuilder("calc").start();
方法四:ProcessImpl
方式一与方式三的底层实现均调用 ProcessImpl
String p = "java.lang.ProcessImpl";
Class clazz = Class.forName(p);
Method method = clazz.getDeclaredMethod("start", String[].class, Map.class, String.class, ProcessBuilder.Redirect[].class, boolean.class);
method.setAccessible(true);
method.invoke(clazz, new String[]{"calc"}, null, null, null, false);
方法五:Native + 反射 执行命令
方法六:JNI命令执行