После перечисления каталога мне теперь нужно удалить все файлы.
Я использовал:
final File[] files = outputFolder.listFiles();
files.delete();
Но это не удалило каталог.
После перечисления каталога мне теперь нужно удалить все файлы.
Я использовал:
final File[] files = outputFolder.listFiles();
files.delete();
Но это не удалило каталог.
Вы должны сделать это для каждого файла:
public static void deleteFolder(File folder) {
File[] files = folder.listFiles();
if(files!=null) { //some JVMs return null for empty dirs
for(File f: files) {
if(f.isDirectory()) {
deleteFolder(f);
} else {
f.delete();
}
}
}
folder.delete();
}
Затем вызовите
deleteFolder(outputFolder);
Чтобы удалить папку с файлами, нет необходимости в цикле или рекурсивном поиске. Вы можете напрямую использовать:
FileUtils.deleteDirectory(<File object of directory>);
Эта функция будет удалять папку и все файлы в ней.
Легкий пирог:)
Все файлы должны быть удалены из каталога до его удаления.
Существуют сторонние библиотеки, в которых есть много общих утилит, включая те, которые делают это для вас:
Вы не можете удалить массив! Это должно работать лучше:
for (File f : files) f.delete();
Но это не сработает, если папки не пусты. Для этих случаев вам потребуется рекурсивно спуститься в иерархию папок и удалить все. Да, стыдно, что Java по умолчанию не может...
Вы не можете удалить массив File
. Как и все другие ответы, вы должны удалить каждый отдельный файл перед удалением папки...
final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
Вот одно из возможных решений для решения проблемы без библиотеки:
public static boolean delete(File file) {
File[] flist = null;
if(file == null){
return false;
}
if (file.isFile()) {
return file.delete();
}
if (!file.isDirectory()) {
return false;
}
flist = file.listFiles();
if (flist != null && flist.length > 0) {
for (File f : flist) {
if (!delete(f)) {
return false;
}
}
}
return file.delete();
}
Использовать FileUtils с FileUtils.deleteDirectory();
for(File f : files) {
f.delete();
}
files.delete(); // will work