0

64 ビットの Java 1.7.0_17 を実行している Windows 7 64 ビットでは、p.waitFor()以下に示すエラーは返されません。

String move_command="cmd.exe /c xcopy /Y /E "+x86_release+" "+path+"\\";
Process p;
p = Runtime.getRuntime().exec(move_command);
p.waitFor();

Windows エクスプローラーを使用すると、すべてのファイルがコピーされているように見えます (同じ番号、同じサイズなど)。

以下を実行すると、次のようにwaitFor()返されます。

String move_command="cmd.exe /c move /Y "+x86_release+" "+path+"\\";
Process p;
p = Runtime.getRuntime().exec(move_command);
p.waitFor();

xcopyとが戻っmoveてこないのは何が違うのwaitFor()でしょうか、それとも完全に間違った方向に進んでいるのでしょうか?

4

2 に答える 2

1

プロセスの標準出力/エラーを消費していないため、プロセスがブロックされていると思われます。コードがこの出力を消費しない場合、生成されたプロセスはハングします (そして、そのプロセスを待ってハングします!)。2 つのコマンドの動作の違いはなぜですか? おそらく、返されるデータの量とパブリッシング バッファーへの影響が原因です。

詳細については、この回答を参照してください。

ファイルをコピーするためにまったく新しいプロセスを生成する必要がないように、Apache Commons FileUtils.copyDirectory()も調査します。

于 2013-05-14T14:46:01.347 に答える