not able to delete the directory through Java
Asked Answered
C

5

16

In my application I have written the code to delete the directory from drive but when I inspect the delete function of File it doesn't delete the file. I have written some thing like this

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

The directory is not in use: still it is not able to delete the directory.

Constitutional answered 21/10, 2010 at 13:28 Comment(1)
You have to delete the contents of the directory first -- however if it still doesn't work with an empty directory, it is because you're running on Windows, and the directory is locked because something is viewing the directory (or the current directory is set to the directory).Value
Z
25

in Java, directory deletion is possible only for empty directory, which leads to methods like the following :

/**
 * 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());
}

This one will delete your folder, even if non-empty, without troubles (excepted when this directory is locked by OS).

Zonate answered 21/10, 2010 at 13:32 Comment(1)
not working...if (files.length==0) i.e. if path.listFiles() not contain any file, then unable to delete directory according to your code.Riptide
E
22

Why to invent a wheel with methods to delete recursively? Take a look at apache commons io. https://commons.apache.org/proper/commons-io/javadocs/api-1.4/

FileUtils.deleteDirectory(dir);

OR

FileUtils.forceDelete(dir);

That is all you need. There is also plenty of useful methods to manipulate files...

Enalda answered 21/10, 2010 at 13:55 Comment(2)
Love when there's something already written. Totally agree. Thanks for the heads-up.Gui
FileUtils#deleteDirectory and FileUtils#forceDelete implementations doing it also recursively...Creditor
J
4

Looking at the docs:

If this pathname denotes a directory, then the directory must be empty in order to be deleted.

Did you make sure that the directory is empty (no hidden files either) ?

Jorgan answered 21/10, 2010 at 13:35 Comment(0)
M
3

The directory must be empty to delete it. If it's not empty, you need to delete it recursively with File.listFiles() and File.delete()

Meli answered 21/10, 2010 at 13:32 Comment(0)
S
1

Two other possibilities (besides the directory not being empty):

  • The user which runs the java program does not have write/delete permission for the directory
  • The directory is used/locked by a different process (you write that it's not, but how have you confirmed this?)
Spleen answered 21/10, 2010 at 13:32 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.