2010-10-21 2 views
8

В моем приложении я написал код для удаления каталога с диска, но когда я проверяю функцию удаления файла, он не удаляет файл. Я написал некоторые вещи, как этотне удалось удалить каталог через Java

//Code to delete the directory if it exists 
File directory = new File("c:\\Report\\"); 
if(directory.exists()) 
directory.delete(); 

в directoryis не используется до сих пор не в состоянии удалить каталог

ответ

18

в Java, каталогов удаление возможно только для пустого каталога, whi ч приводит к методам, как следующее:

/** 
* Force deletion of directory 
* @param path 
* @return 
*/ 
static public boolean deleteDirectory(File path) { 
    if (path.exists()) { 
     File[] files = path.listFiles(); 
     for (int i = 0; i < files.length; i++) { 
      if (files[i].isDirectory()) { 
       deleteDirectory(files[i]); 
      } else { 
       files[i].delete(); 
      } 
     } 
    } 
    return (path.delete()); 
} 

Это один будет удалить папку, даже если не пусто, без проблем (за исключением, когда этот каталог заблокирован ОС).

1

Каталог должен быть пустым, чтобы удалить его. Если это не так пусто, вам нужно удалить его рекурсивно с File.listFiles() и File.delete()

1

Две другие возможности (кроме каталога не является пустым):

  • Пользователь, который бежит Java программа не имеет запись/удаление для каталога
  • каталог используется/заблокирован другим процессом (вы пишете, что это не так, но как ты это подтвердил?)
2

Глядя на документы:

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

Вы уверены, что каталог пуст (без скрытых файлов)?

13

Зачем изобретать колесо с методами для рекурсивного удаления? Взгляните на apache commons io. https://commons.apache.org/proper/commons-io/javadocs/api-1.4/

FileUtils.deleteDirectory(dir); 

ИЛИ

FileUtils.forceDelete(dir); 

То есть все, что вам нужно. Существует также множество полезных методов для управления файлами ...

+0

Любовь, когда есть что-то уже написанное. Полностью согласен. Спасибо за хедз-ап. – Aaron

+0

FileUtils # deleteDirectory и FileUtils # forceDelete реализация делает это также рекурсивно ... –

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