Vipul
Vipul

Reputation: 2655

not able to delete the directory through Java

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.

Upvotes: 16

Views: 20982

Answers (5)

Ilja S.
Ilja S.

Reputation: 1140

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...

Upvotes: 22

user268396
user268396

Reputation: 11966

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) ?

Upvotes: 4

Riduidel
Riduidel

Reputation: 22292

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).

Upvotes: 25

Michael Borgwardt
Michael Borgwardt

Reputation: 346250

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?)

Upvotes: 1

iirekm
iirekm

Reputation: 9406

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()

Upvotes: 3

Related Questions