Я хочу удалить все файлы внутри каталога ABC.
При попытке с FileUtils.deleteDirectory(new File("C:/test/ABC/"));
ним также удаляет папку ABC.
Есть ли решение с одним вкладышем, где я могу удалить файлы внутри каталога, но не в каталоге?
java
file-io
apache-commons-io
Фахим Паркар
источник
источник
rm -rf directory; mkdir directory
было быстрее, чем использованиеFileUtils.cleanDirectory
.Ответы:
Этот метод доступен в том же файле. Это также рекурсивно удалит все вложенные папки и файлы в них.
Docs:
org.apache.commons.io.FileUtils.cleanDirectory
источник
rm -rf directory
был намного эффективнее, чем использованиеFileUtils.cleanDirectory
.Вы имеете в виду как?
Это приведет к удалению только файлов, а не каталогов.
источник
for(File file: dir.listFiles())
вероятно, подразумевается как ....for (File file : new java.io.File("C:\\DeleteMeFolder").listFiles())
...Ответ Питера Лоури великолепен, потому что он прост и не зависит от чего-то особенного, и именно так вы должны это делать. Если вам нужно что-то, что также удаляет подкаталоги и их содержимое, используйте рекурсию:
Чтобы сэкономить подкаталоги и их содержимое (часть вашего вопроса), измените следующим образом:
Или, так как вы хотели однострочное решение:
Использование внешней библиотеки для такой тривиальной задачи не очень хорошая идея, если в любом случае вам не нужна эта библиотека для чего-то другого, и в этом случае предпочтительнее использовать существующий код. Похоже, вы все равно используете библиотеку Apache, поэтому используйте ее
FileUtils.cleanDirectory()
метод.источник
Java 8 Stream
Это удаляет только файлы из ABC (подкаталоги не затрагиваются):
Это удаляет только файлы из ABC (и подкаталоги):
^ Эта версия требует обработки IOException
источник
Или использовать это в Java 8:
Жаль, что обработка исключений такая громоздкая, иначе это будет однострочник ...
источник
источник
Другое решение Java 8 Stream для удаления всего содержимого папки, включая подкаталоги, но не самой папки.
Использование:
и код:
Проблема с каждым решением для потока, включающим Files.walk или Files.delete, заключается в том, что эти методы генерируют IOException, который является трудной для обработки в потоках.
Я попытался создать решение, которое было бы более кратким.
источник
Для удаления всех файлов из каталога скажите «C: \ Example»
источник
rm -rf
был намного более производительным, чемFileUtils.cleanDirectory
.Не однострочное решение, но после обширного тестирования мы обнаружили, что использование
rm -rf
было в несколько раз быстрее, чем использованиеFileUtils.cleanDirectory
.Конечно, если у вас небольшой или простой каталог, это не имеет значения, но в нашем случае у нас было несколько гигабайт и вложенные вложенные подкаталоги, где это заняло бы более 10 минут
FileUtils.cleanDirectory
и только 1 минутуrm -rf
.Вот наша грубая реализация Java для этого:
Стоит попробовать, если вы имеете дело с большими или сложными каталогами.
источник
Если вы хотите удалить все файлы, удалите
Заявление это будет работать.
источник
Я думаю, что это будет работать (основываясь на предыдущем ответе NonlinearFruit):
Ура!
источник