Как мне выполнить команду rd в Java? - PullRequest
3 голосов
/ 13 мая 2009

Как мне выполнить

rd / s / q c: \ folder

на Java?

Отлично работает в командной строке.

Ответы [ 6 ]

6 голосов
/ 13 мая 2009

Согласно ответу дцаззы :

Runtime.getRuntime().exec("cmd.exe /k rd /s /q c:\\folder");

Отлично работает под WinXP SP3. Параметр /k показывает, что будет следовать команда, которая должна быть выполнена из cmd.exe.

Удачи с этим!

5 голосов
/ 13 мая 2009

Проверьте метод Runtime.exec , который позволяет вызывать внешние процессы. (Имейте в виду, что вы теряете некоторую независимость от платформы, поскольку это будет зависеть от машины с установленной командой rd и от пути.)

Лучшим вариантом может быть сделать то же самое в чистой Java - следующее должно быть эквивалентно:

private void deleteDirectory(File directory)
{
   for (File entity : directory.listFiles())
   {
      if (entity.isDirectory())
      {
         deleteDirectory(entity);
      }
      else
      {
         entity.delete();
      }
   }
   directory.delete();
}

deleteDirectory(new File("C:\\folder"));

Добавление проверки ошибок по мере необходимости. : -)

3 голосов
/ 13 мая 2009

Проверьте FileUtils в Apache Commons-IO; в частности, методы deleteDirectory и deleteQuietly , которые могут рекурсивно удалять каталог.

2 голосов
/ 13 мая 2009

Посмотрите на File.delete(String path) метод, т.е. на:

new File("c:\\folder").delete();

Если /s (рекурсивное) удаление важно, то (не проверено):

public void deltree(File file) {
    if (file.isDirectory()) {
        for (File f : file.listFiles()) {
            deltree(f);
        }
    }
    file.delete();
}

public void deltree(String path) {
    deltree(new File(path));
}

вызывается как:

deltree("c:\\folder");
1 голос
/ 13 мая 2009

Если вы хотите выполнить его точно так, как вы указали, вы можете сделать

Process p=Runtime.getRuntime().exec("cmd.exe /k rd /s /q c:\\folder");
1 голос
/ 13 мая 2009

Вы можете удалять только пустые каталоги в Java. Сначала вы должны удалить файлы и подкаталоги.

 public static boolean removeDirectoryRecursively(File dir) {
            if (dir.isDirectory()) {
                String[] children = dir.list();
                for (int i = 0; i < children.length; i++) {
                    boolean success = removeDirectoryRecursively(new File(dir, children[i]));
                    if (!success) {
                        return false;
                    }
                }
            }
            // The directory is now empty so delete it
            return dir.delete();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...