After enumerating a directory, I now need to delete all the files.
I used:
final File[] files = outputFolder.listFiles();
files.delete();
But this hasn't deleted the directory.
After enumerating a directory, I now need to delete all the files.
I used:
final File[] files = outputFolder.listFiles();
files.delete();
But this hasn't deleted the directory.
You have to do this for each File:
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();
}
Then call
deleteFolder(outputFolder);
outputFolder.delete()
instead of output.delete()
. –
Startling folder
too, which is not wanted in the question. To not delete folder
, move folder.delete()
to the end of if(f.isDirectory()) {..}
block. –
Macaw To delete folder having files, no need of loops or recursive search. You can directly use:
FileUtils.deleteDirectory(<File object of directory>);
This function will directory delete the folder and all files in it.
All files must be delete from the directory before it is deleted.
There are third party libraries that have a lot of common utilities, including ones that does that for you:
Files.deleteRecursively()
was removed from Guava in version 11.0. –
Hoskins You can't delete on an array ! This should work better :
for (File f : files) f.delete();
But it won't work if the folders are not empty. For this cases, you will need to recursively descend into the folder hierarchy and delete everything. Yes it's a shame Java can't do that by default...
Here is one possible solution to solve the problem without a library :
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();
}
You can't delete an File
array. As all of the other answers suggest, you must delete each individual file before deleting the folder...
final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
Use FileUtils with FileUtils.deleteDirectory();
FileUtils
is a part of Apache Commons IO. –
Worser for(File f : files) {
f.delete();
}
files.delete(); // will work
© 2022 - 2024 — McMap. All rights reserved.