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.