执行ProcessBuilder后加载属性

时间:2016-10-12 04:58:55

标签: java properties processbuilder

我有一个通过 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);
   
  
 }




希望有人可以帮助我。

1 个答案:

答案 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对象表示的进程终止。