ProcessBuilder 执行后加载 属性
load Property after ProcessBuilder is executed
我有一个通过 ProcessBuilder 执行批处理文件的方法。批处理文件执行后,会更新本地保存的一个ini文件的内容。
ProcessBuilder 执行后,我需要加载 ini 文件以获取属性,因为我需要 return 它作为 JsonObject。
我已经能够做到这一切。我的问题是我得到的属性是上次执行 ProcessBuilder 的 ini 文件的内容,而不是当前的。要从 ProcessBuilder 的当前执行中获取 ini 文件的内容,我必须重新加载我的 url,然后它会再次调用批处理文件。
我的问题是,我应该如何加载我的 ini 文件属性,以便它在执行批处理文件后获得更新的值?
这是我的方法:
public void identify() throws IOException {
ProcessBuilder builder=new ProcessBuilder("cmd.exe","/c","StartSample.bat");
builder.directory(new File(PATH));
Process process = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
r.close();
Properties p = new Properties();
p.load(new FileInputStream("C:/PV/PVInfo.ini"));
String pvidNO1 = p.getProperty("PVIDNO");
String pvidNo2 = p.getProperty("PVIDNo");
String pvidNo3 = p.getProperty("PV-ID");
JSONObject jsonObject = new JSONObject();
jsonObject.put("PVIDNO", pvidNO1);
jsonObject.put("PVIDNo", pvidNo2);
jsonObject.put("pvId", pvidNo3);
System.out.println(jsonObject);
}
希望有人能帮我解决这个问题。
以下代码段将如您所愿。
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "StartSample.bat");
builder.directory(new File(PATH));
Process process = builder.start();
process.waitFor();
Properties p = new Properties();
try (FileInputStream fis = new FileInputStream("C:/PV/PVInfo.ini")) {
p.load(fis);
}
String pvidNO1 = p.getProperty("PVIDNO");
String pvidNo2 = p.getProperty("PVIDNo");
String pvidNo3 = p.getProperty("PV-ID");
来自 process.waitFor() javadoc
Causes the current thread to wait, if necessary, until the process represented by this Process object has terminated.
我有一个通过 ProcessBuilder 执行批处理文件的方法。批处理文件执行后,会更新本地保存的一个ini文件的内容。
ProcessBuilder 执行后,我需要加载 ini 文件以获取属性,因为我需要 return 它作为 JsonObject。
我已经能够做到这一切。我的问题是我得到的属性是上次执行 ProcessBuilder 的 ini 文件的内容,而不是当前的。要从 ProcessBuilder 的当前执行中获取 ini 文件的内容,我必须重新加载我的 url,然后它会再次调用批处理文件。
我的问题是,我应该如何加载我的 ini 文件属性,以便它在执行批处理文件后获得更新的值?
这是我的方法:
public void identify() throws IOException {
ProcessBuilder builder=new ProcessBuilder("cmd.exe","/c","StartSample.bat");
builder.directory(new File(PATH));
Process process = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(process.getInputStream()));
r.close();
Properties p = new Properties();
p.load(new FileInputStream("C:/PV/PVInfo.ini"));
String pvidNO1 = p.getProperty("PVIDNO");
String pvidNo2 = p.getProperty("PVIDNo");
String pvidNo3 = p.getProperty("PV-ID");
JSONObject jsonObject = new JSONObject();
jsonObject.put("PVIDNO", pvidNO1);
jsonObject.put("PVIDNo", pvidNo2);
jsonObject.put("pvId", pvidNo3);
System.out.println(jsonObject);
}
希望有人能帮我解决这个问题。
以下代码段将如您所愿。
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "StartSample.bat");
builder.directory(new File(PATH));
Process process = builder.start();
process.waitFor();
Properties p = new Properties();
try (FileInputStream fis = new FileInputStream("C:/PV/PVInfo.ini")) {
p.load(fis);
}
String pvidNO1 = p.getProperty("PVIDNO");
String pvidNo2 = p.getProperty("PVIDNo");
String pvidNo3 = p.getProperty("PV-ID");
来自 process.waitFor() javadoc
Causes the current thread to wait, if necessary, until the process represented by this Process object has terminated.