2013-06-29 3 views
0

У меня есть ProcessBuilder, который должен удалить File.txt, а затем переименовать NewFile.txt. Проблема в том, что оба файла удалены. Любая идея, почему и как исправить?ProcessBuilder delete and rename

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

ответ

3

Вопрос заключается в том, что вы используете одну команду, а именно

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

Это безусловно удаляет файлы с именем File.txt, mv и NewFile.txt.

Вы хотите разбить это на две отдельные команды.

Еще лучше, используйте File.delete() и File.renameTo(). Это не только даст вам больше контроля, но и сделает ваш код более портативным.

+0

Спасибо. К сожалению, это ответило на мой вопрос. Что мне действительно хотелось бы сделать: Запустить Program.jar, Удалить Program.jar, Переименовать NewProgram.jar в Program.jar, Запустить Program.jar. Поскольку я запускаю Program.jar (File.txt), его нельзя удалить. Можно ли решить одну команду ProcessBuilder для каждой команды? – Grains

0

ProcessBuilder.start создает один процесс. Вы должны вызвать его дважды, потому что у вас есть две команды: сначала с первой командой, а затем со второй.

Кстати, почему вы не используете API-интерфейс Java для этого? Гораздо проще сделать это с Java, чем справиться со сложностью запуска отдельного процесса, не говоря уже о более эффективном.