Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ProcessBuilder删除和重命名_Java_Macos_Command_Processbuilder - Fatal编程技术网

Java ProcessBuilder删除和重命名

Java ProcessBuilder删除和重命名,java,macos,command,processbuilder,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>(); // CREAT

我有一个
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();
        }
    }
}
公共类MyProcessBuilder{
公共静态void main(字符串[]args){
final ArrayList命令=new ArrayList();
//创建文件
File File=新文件(“File.txt”);
File newFile=新文件(“newFile.txt”);
试一试{
如果(!file.exists())
createNewFile();
如果(!newFile.exists())
createNewFile();
}捕获(例外e){}
//强制删除文件.txt
命令。添加(“rm”);
命令。添加(“-f”);
add(“File.txt”);
//将NewFile.txt重命名为File.txt
命令。添加(“mv”);
add(“NewFile.txt”);
add(“File.txt”);
最终ProcessBuilder=新的ProcessBuilder(命令);
试一试{
builder.start();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}

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

rm -f File.txt mv NewFile.txt File.txt
这将无条件地删除名为
File.txt
mv
NewFile.txt
的文件

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


更好的是,使用和使用。这不仅会给你更多的控制,而且会使你的代码更易于移植。

问题是你只运行一个命令,即

rm -f File.txt mv NewFile.txt File.txt
这将无条件地删除名为
File.txt
mv
NewFile.txt
的文件

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


更好的是,使用和使用。这不仅会给您更多的控制,而且会使您的代码更易于移植。

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


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

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


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

谢谢。不幸的是,这回答了我的问题。。我真正想做的是:运行Program.jar,删除Program.jar,将NewProgram.jar重命名为Program.jar,运行Program.jar。因为我正在运行程序.jar(File.txt),所以无法删除它。每个命令只需一个ProcessBuilder即可解决此问题?谢谢。不幸的是,这回答了我的问题。。我真正想做的是:运行Program.jar,删除Program.jar,将NewProgram.jar重命名为Program.jar,运行Program.jar。因为我正在运行程序.jar(File.txt),所以无法删除它。是否可以用每个命令的一个ProcessBuilder来解决?