2009-05-13 2 views

ответ

6

По dtsazza's answer:

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

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

Удачи вам в этом!

+0

именно то, что я искал! –

+3

Хотя, конечно, вам нужно удвоить обратную косую черту (папка c: \\) –

5

Проверьте метод 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")); 

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

+0

rd отлично работает в командной строке, но не через функцию Runtime.exec(). –

+1

Это потому, что 'rd' является встроенной командой в 'cmd.exe' – Alnitak

+0

ок, но как я могу ее выполнить в java-идеях? –

2

Посмотрите на 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"); 
+0

это не удаляет папку, которая содержит файлов и/или папок. –

+0

Наложение изменений - удалите комментарий. – Alnitak

+0

File.delete() возвращает логический флаг, указывающий, было ли удаление успешным, а не бросать исключение IOException; если вы проверяете это? –

1

Вы можете удалить пустые каталоги в 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(); 
     } 
+0

File.listFiles() намного проще – Alnitak

3

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

1

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

Process p=Runtime.getRuntime().exec("cmd.exe /k rd /s /q c:\\folder"); 
+0

В конце концов, «он отлично в командной строке». :) –

+0

это не работает –

Смежные вопросы