Java 在执行ProcessBuilder后加载属性

Java 在执行ProcessBuilder后加载属性,java,properties,processbuilder,Java,Properties,Processbuilder,我有一个方法可以通过ProcessBuilder执行批处理文件。执行批处理文件后,将更新本地保存的ini文件的内容 在ProcessBuilder执行之后,我需要加载ini文件以获取属性,因为我需要将其作为JsonObject返回 这一切我都能做到。我的问题是,我获取的属性是来自ProcessBuilder最后一次执行的ini文件的内容,而不是当前的。要从ProcessBuilder的当前执行中获取ini文件的内容,我必须重新加载url,然后再次调用批处理文件 我的问题是,如何加载ini文件属性

我有一个方法可以通过ProcessBuilder执行批处理文件。执行批处理文件后,将更新本地保存的ini文件的内容

在ProcessBuilder执行之后,我需要加载ini文件以获取属性,因为我需要将其作为JsonObject返回

这一切我都能做到。我的问题是,我获取的属性是来自ProcessBuilder最后一次执行的ini文件的内容,而不是当前的。要从ProcessBuilder的当前执行中获取ini文件的内容,我必须重新加载url,然后再次调用批处理文件

我的问题是,如何加载ini文件属性,以便在批处理文件执行后获得更新的值

这是我的方法:

public void identify()引发IOException{
ProcessBuilder=newProcessBuilder(“cmd.exe”、“c”、“StartSample.bat”);
目录(新文件(路径));
Process=builder.start();
BufferedReader r=新的BufferedReader(新的InputStreamReader(process.getInputStream());
r、 close();
属性p=新属性();
p、 加载(新文件输入流(“C:/PV/PVInfo.ini”);
字符串pvidNO1=p.getProperty(“PVIDNO”);
字符串pvidNo2=p.getProperty(“PVIDNo”);
字符串pvidNo3=p.getProperty(“PV-ID”);
JSONObject JSONObject=新的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");
来自javadoc

如有必要,使当前线程等待,直到此进程对象表示的进程终止


似乎使用可能是解决方案。我应该保留我的加载属性代码,还是应该遵循你的?因为我在这一行上得到一个错误(FileInputStream fis=newfileinputstream(“C:/PV/PVInfo.ini”)),它说:对于低于1的源级别,这里不允许资源规范。7@Kylie对于与
资源规范相关的问题,对于低于1.7的源代码级别,此处不允许使用
:您仍然使用低于版本7的Java吗?如果可能,考虑升级。如果无法升级,您需要自行处理
文件输入流的关闭。