我有一个通过 ProcessBuilder 执行批处理文件的方法。执行批处理文件后,将更新本地保存的ini文件的内容。
在ProcessBuilder执行之后,我需要加载ini文件来获取属性,因为我需要将它作为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);
}

希望有人可以帮助我。
答案 0 :(得分:2)
以下代码段可以正常运行。
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
如果需要,使当前线程等待,直到此Process对象表示的进程终止。