2

.batで動的に作成していますJava

ファイルを作成して実行した後、削除したいと思います。

delete()ファイルの実行後にそれが実行されることを確認するために.bat、別のスレッド内のファイルを削除します。

これはこのタスクに適したアプローチですか?より良い方法でそれをどのように実装しますか?

final File file = new File("run.bat");
file.createNewFile();
PrintWriter writer = new PrintWriter(file, "UTF-8");
writer.println(COMMAND1);
writer.println(COMMAND2);

.... ANOTHER COMMANDS

writer.close();
Runtime.getRuntime().exec("cmd /c start a.bat");

new Thread(new Runnable() {
    public void run() {
        file.delete();
    }
}).run();
4

3 に答える 3

6

別のスレッドでファイルを削除しません。削除しようとしたときにファイルの実行がまだ実行されている場合はどうなりますか?

ファイルから終了コードを要求するか、process.waitFor()を使用して、必要に応じて、このProcessオブジェクトで表されるプロセスが終了するまで現在のスレッドを待機させることを検討します。

Process p = Runtime.getRuntime().exec("cmd /c start a.bat");
p.waitFor();
file.delete();
于 2013-02-28T13:45:18.143 に答える
2

これを試してください。これにより、コードはバッチファイルの実行が完了するまで待機してからファイルを削除します。

Process batchFileExecutionProcess = Runtime.getRuntime().exec("cmd /c start a.bat");
batchFileExecutionProcess.waitFor();
file.delete();

理想的には、waitFor()メソッドからの0リターンを探すなど、このソリューションにもエラー処理を組み込む必要があります。

于 2013-02-28T13:45:38.027 に答える
1

いいえ、それは良いアプローチではありません。実際、余分なスレッドの利点はわかりません。ほとんどの場合、ファイルがまだ使用されている間にファイルを削除しようとしcmd、削除は失敗します。代わりにProcess、オブジェクト(の結果exec())を使用し、オブジェクトが終了するまで待ってから、ファイルを削除する必要があります。

Process p = Runtime.getRuntime().exec("cmd /c start a.bat");
p.waitFor();
file.delete()
于 2013-02-28T13:46:33.870 に答える