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.txtmv的文件NewFile.txt

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

更好的是,使用File.delete()and File.renameTo()。这不仅会给您更多的控制权,而且还会使您的代码更具可移植性。

于 2013-06-29T16:00:11.973 回答
0

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

顺便说一句,您为什么不为此使用 Java 的文件 API?从 Java 中执行此操作比处理启动单独进程的复杂性要容易得多,更不用说更高效了。

于 2013-06-29T16:01:18.510 回答