2016-10-12 12 views
1

ProcessBuilderでバッチファイルを実行するメソッドがあります。バッチファイルを実行すると、ローカルに保存されているiniファイルの内容が更新されます。ProcessBuilderを実行した後のloadプロパティ

ProcessBuilderが実行された後、JsonObjectとして返す必要があるため、プロパティを取得するためにiniファイルを読み込む必要があります。

私はこれをすべて実行することができました。私の問題は、現在のプロパティではなく、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

[process.waitFor()](http://docs.oracle.com/javase/8/docs/api/java/lang/Process.html#waitFor--)を使用しているようですが、解決策になります。 – SubOptimal

答えて

2

次のスニペットは期待通りに機能します。 process.waitFor()のJavadoc

から

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オブジェクトが表すプロセスが終了するまで、現在のスレッドを待機させ。

+0

ロードプロパティのコードを保持する必要がありますか?この行にエラーが発生しているためです。(FileInputStream fis =新しいFileInputStream( "C:/PV/PVInfo.ini"))_これは次のようになります:**ソースレベルが1.7未満の場合、ここではリソース指定が許可されていません** – Kylie

+0

process .waitForは私のために働いていました。ありがとう! – Kylie

+1

@Kylie 'ソースレベル1.7未満では、ここではリソース指定が許可されていません。 'に関するあなたの質問は、まだバージョン7以下のJavaになっていますか?可能であれば、アップグレードを検討してください。アップグレードが不可能な場合は、 'FileInputStream'の終了を自分で処理する必要があります。 – SubOptimal