0

ProcessBuilder削除File.txtしてから名前を変更する必要がありNewFile.txtます。問題は、両方のファイルが削除されていることです。理由と修正方法はありますか?

public class MyProcessBuilder {

    public static void main(String[] args){
        final ArrayList<String> command = new ArrayList<String>();

        // CREATE FILES
        File file = new File("File.txt");
        File newFile = new File("NewFile.txt");     
        try{
            if(!file.exists())
                file.createNewFile();
            if(!newFile.exists())
                newFile.createNewFile();
        } catch(Exception e){}

        // force remove File.txt
        command.add("rm"); 
        command.add("-f");
        command.add("File.txt");

        // rename NewFile.txt to File.txt
        command.add("mv");
        command.add("NewFile.txt");
        command.add("File.txt");

        final ProcessBuilder builder = new ProcessBuilder(command);
        try {
            builder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4

2 に答える 2

3

問題は、単一のコマンドを実行していることです。

rm -f File.txt mv NewFile.txt File.txt

File.txtこれにより、 、mvおよびという名前のファイルが無条件に削除されますNewFile.txt

これを 2 つの別個のコマンドに分割します。

さらに良いことに、 と を使用File.delete()File.renameTo()ます。これにより、より多くの制御が可能になるだけでなく、コードの移植性も向上します。

于 2013-06-29T16:00:11.973 に答える
0

ProcessBuilder.start は 1 つのプロセスを作成します。2 つのコマンドがあるため、2 回呼び出す必要があります。最初は最初のコマンドで、次に 2 番目のコマンドです。

ところで、なぜこれに Java のファイル API を使用しないのですか? 別のプロセスを起動する複雑さに対処するよりも、Java からこれを実行する方がはるかに簡単です。

于 2013-06-29T16:01:18.510 に答える