ProcessBuilder删除并重命名

时间:2013-06-29 15:57:55

标签: java macos command processbuilder

我的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();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

问题是您正在运行单个命令,即

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

这无条件地删除名为File.txtmvNewFile.txt的文件。

您希望将其拆分为两个单独的命令。

更好的是,使用File.delete()File.renameTo()。这不仅可以为您提供更多控制,还可以使您的代码更具可移植性。

答案 1 :(得分:0)

ProcessBuilder.start创建一个进程。你需要调用它两次,因为你有两个命令:首先是第一个命令,然后是第二个命令。

顺便说一下,为什么不使用Java的文件API呢?使用Java来实现这一点要比处理启动单独流程的复杂性要容易得多,更不用说更高效了。