javaから「VACUUM VERBOSE」コマンドを実行しようとしています。 は、ここに私のコード考えられる原因java.io.IOException:CreateProcess error = 2、指定されたファイルが見つかりません
public void executeCommand()
{
String cmd1= "cmd.exe /c start";
String location="C:\\PROGRA~1\\PostgreSQL\\8.3\\bin\\";
String postgresCommand="psql -h localhost -U postgres -d postgres";
String autoVaccum="-c \"vacuum verbose\"";
String []actualCmd={cmd1,location,postgresCommand,autoVaccum};
Process process=null;
try {
process = Runtime.getRuntime().exec(actualCmd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
MyTest test= new MyTest();
test.executeCommand();
}
である。しかし、私は直接直接>実行ウィンドウにその実行sucessfully 例:[スタート] - 上記の文字列を入力すると、私は次の例外に
java.io.IOException: Cannot run program "cmd.exe /c start": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at MyTest.executeCommand(MyTest.java:36)
at MyTest.main(MyTest.java:48)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 5 more
を取得しています。 CMD.EXE/Cを開始しC:\ PROGRA〜1/PostgreSQLの/ 8.3/binに/ psqlの-h localhostの-U postgresのはpostgresの-c "冗長な真空を" -d
誰もが正確に上記のプログラムに間違っているかを知ることができます?
ありがとうThomas、 私のコードで少し修正を加えました。 String配列の代わりに単一の文字列を使用し、問題が解決されました。 文字列actualCmd = cmd1 + location + postgresCommand + autoVaccum; しかし、このプログラムは "VACUUM VERBOSE"コマンドでどのような操作が行われているかを示すコマンドラインウィンドウを開きません。 しかし、このプログラムを使って他のコマンドを実行すると、コマンドラインウィンドウが開きます 例:文字列cmd1 = "cmd.exe/c start dir"; 基本的には、ユーザーに 'vacuum command'の出力を表示したかった – Abhi
Processオブジェクトからの出力を取得する際の更新を参照してください。 – Thomas