我的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();
}
}
}
答案 0 :(得分:3)
问题是您正在运行单个命令,即
rm -f File.txt mv NewFile.txt File.txt
这无条件地删除名为File.txt
,mv
和NewFile.txt
的文件。
您希望将其拆分为两个单独的命令。
更好的是,使用File.delete()
和File.renameTo()
。这不仅可以为您提供更多控制,还可以使您的代码更具可移植性。
答案 1 :(得分:0)
ProcessBuilder.start创建一个进程。你需要调用它两次,因为你有两个命令:首先是第一个命令,然后是第二个命令。
顺便说一下,为什么不使用Java的文件API呢?使用Java来实现这一点要比处理启动单独流程的复杂性要容易得多,更不用说更高效了。