追加のコマンドでcmd.exeを呼び出し、Javaを使用して同じコマンドから生成された出力を収集するプログラムをいくつか作成しています。以下はサンプルプログラムです--
public class LoadShell {
public static void main(String[] args) throws Exception {
//Line1
String [] command ={"cmd.exe","/c","dir"};
ProcessBuilder probuilder = new ProcessBuilder( command );
Process process = probuilder.start();
InputStream inputstream1 = process.getInputStream();
InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);
String line="";
while ((line = bufferedreader.readLine()) != null) {
System.out.println(line);
}
}
}
これらのプログラムは期待どおりに機能しています。今、私はより単純な要件を持っています。引数なしでcmd.exeを呼び出し、出力を文字列として収集したいと思います。これは、プロジェクト固有の目的で、プロセスオブジェクトの参照と文字列を別のメソッドに送信したいためです。したがって、Line1のコードを次のように変更しました--
public class LoadShell {
public static void main(String[] args) throws Exception {
//Line1
String [] command ={"cmd.exe"};
ProcessBuilder probuilder = new ProcessBuilder( command );
Process process = probuilder.start();
InputStream inputstream1 = process.getInputStream();
InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);
int intch;
String line="";
while ((line = bufferedreader.readLine()) != null) {
System.out.println(line);
}
}
}
しかし、この場合、readLine
メソッドは印刷後に無期限にハングします--
Microsoft Windows[バージョン6.1.7601]Copyright(c)2009MicrosoftCorporation。全著作権所有。
BufferedReader
だから私も次の代わりにの読み取りを使用してみreadline
ました-
while ((intch = bufferedreader.read()) != -1) {
int ch = (char) intch;
System.out.println(ch);
}
しかし、-に対応するバイトを読み取った後、読み取りでさえハングしています。
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
プログラムをハングさせずに、以下の完全な出力を取得する方法はありますか?
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Users\devshankhasharm>
任意のアイデアをいただければ幸いです。