Я хочу создать и удалить каталог с помощью Java, но он не работает.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
java
file-io
delete-directory
Мистер Дж.
источник
источник
Ответы:
Java не может удалять папки с данными. Перед удалением папки необходимо удалить все файлы.
Используйте что-то вроде:
Тогда вы сможете удалить папку с помощью
index.delete()
Untested!источник
FileUtils.deleteDirectory
как сказал @Francesco Menzani.if (!index.delete()) {...}
. Затем, если index является символической ссылкой, она удаляется независимо от того, есть ли у нее содержимое.entries
является ли он нулевым.Просто однострочник.
Документация здесь
источник
Это работает, и хотя пропуск проверки каталога выглядит неэффективным, это не так: проверка выполняется сразу в
listFiles()
.Обновите, чтобы избежать следующих символических ссылок:
источник
Я предпочитаю это решение на java 8:
С этого сайта: http://www.baeldung.com/java-delete-directory
источник
Files.walk()
, что явно указано в документации API. Я знаю, что если вы, например, не закроете поток, возвращенный,Files.list()
у вас могут закончиться ручки, и программа выйдет из строя. См., Например, stackoverflow.com/q/36990053/421049 и stackoverflow.com/q/26997240/421049 .В JDK 7 вы можете использовать
Files.walkFileTree()
иFiles.deleteIfExists()
для удаления дерева файлов. (Пример: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )В JDK 6 один из возможных способов - использовать FileUtils.deleteQuietly из Apache Commons, который удалит файл, каталог или каталог с файлами и подкаталогами.
источник
Используя Apache Commons-IO, он выглядит следующим образом:
Это (немного) более производительно, чем
FileUtils.deleteDirectory
.источник
Как уже упоминалось, Java не может удалить папку, содержащую файлы, поэтому сначала удалите файлы, а затем папку.
Вот простой пример:
Или:
источник
Моя базовая рекурсивная версия, работающая со старыми версиями JDK:
источник
listFiles()
возвращает ли значение null, а не вызыватьisDirectory()
.Это лучшее решение для
Java 7+
:источник
Guava 21+ спешит на помощь. Используйте только в том случае, если нет символических ссылок, указывающих на каталог, который нужно удалить.
(Этот вопрос хорошо проиндексирован Google, поэтому другие люди, использующие Гуава, могут быть счастливы найти этот ответ, даже если он повторяется с другими ответами в другом месте.)
источник
Мне больше всего нравится это решение. Он не использует стороннюю библиотеку, вместо этого он использует NIO2 из Java 7.
источник
Еще один вариант - использовать
org.springframework.util.FileSystemUtils
соответствующий метод Spring, который рекурсивно удалит все содержимое каталога.Это сработает!
источник
В этом
ты звонишь
после
Это означает, что вы снова создаете файл после удаления File.delete () возвращает логическое значение. Итак, если вы хотите проверить, сделайте это,
System.out.println(index.delete());
если вы получите,true
тогда это означает, что файл удалениз комментариев, приведенных ниже, обновленный ответ выглядит следующим образом
источник
Если у вас есть подпапки, у вас возникнут проблемы с ответами Cemron. поэтому вы должны создать метод, который работает следующим образом:
источник
Вы можете использовать FileUtils.deleteDirectory . JAVA не может удалить непустые складки с помощью File.delete () .
источник
directry не может просто удалить, если в нем есть файлы, поэтому вам может потребоваться сначала удалить файлы внутри, а затем каталог
источник
Вы можете сделать рекурсивный вызов, если существуют подкаталоги
источник
мы можем использовать
spring-core
зависимость;источник
Большинство ответов (даже недавних), ссылающихся на классы JDK, полагаются на,
File.delete()
но это ошибочный API, поскольку операция может завершиться с ошибкой.В
java.io.File.delete()
документации метода указано:В качестве замены вы должны отдать предпочтение
Files.delete(Path p)
тому, чтобыIOException
сообщение об ошибке.Фактический код можно было бы написать так:
источник
вы можете попробовать следующее
Если внутри вашей папки есть подпапки, вам может потребоваться рекурсивно удалить их.
источник
источник
Работает как шарм. И для папки, и для файлов. Салам :)
источник
Удалите это из другой части
источник
Некоторые из этих ответов кажутся излишне длинными:
Также работает для подкаталогов.
источник
Вы можете использовать эту функцию
источник