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来解决?