1. 启动进程并获得返回结果
public static void main(String[] args) throws IOException {
String batPath = "C:\\Users\\Administrator\\Desktop\\新建文本文档.bat";
Process process = new ProcessBuilder(batPath).start();
InputStream inputStream = process.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String result = getResultFromBufferReader(bufferedReader);
System.out.println(result);
}
public static String getResultFromBufferReader(BufferedReader bufferedReader) throws IOException {
char[] buffer = new char[1024];
StringBuilder stringBuilder = new StringBuilder();
while (true) {
int numOfRead = bufferedReader.read(buffer);
if (numOfRead == -1) break;
stringBuilder.append(buffer, 0, numOfRead);
}
return stringBuilder.toString();
}
2. 反射
public class HelloWorld {
public static void main(String[] args) throws Exception {
Class pointClazz = Class.forName("Point");
for (Field field : pointClazz.getDeclaredFields()) {
System.out.println(field);
}
for (Method method : pointClazz.getDeclaredMethods()) {
System.out.println(method);
}
/*
int Point.x
int Point.y
public int Point.getXAddY()
*/
Object object = pointClazz.newInstance();
Point point = (Point)object;
point.x = 1;
point.y = 2;
System.out.println(object); // Point{x=1, y=2}
}
}
class Point {
int x;
int y;
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
}
3. 用反射访问私有属性
public class HelloWorld {
public static void main(String[] args) throws Exception {
Point point = new Point(1, 2);
System.out.println(getPrivateIntFieldValue(point, "x")); // 1
setPrivateIntFieldValue(point,"x",2);
System.out.println(point); // Point{x=2, y=2}
}
public static void setPrivateIntFieldValue(final Object object, final String fieldName, final int value) throws Exception {
Field privateIntField = object.getClass().getDeclaredField(fieldName);
privateIntField.setAccessible(true);
privateIntField.setInt(object, value);
}
public static int getPrivateIntFieldValue(final Object object, final String fieldName) throws Exception{
Field privateIntField = object.getClass().getDeclaredField(fieldName);
privateIntField.setAccessible(true);
return privateIntField.getInt(object);
}
}
class Point {
private int x;
private int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "Point{" +
"x=" + x +
", y=" + y +
'}';
}
}