Java better way to delete file if exists

Java

Java Problem Overview


We need to call file.exists() before file.delete() before we can delete a file E.g.

 File file = ...;
 if (file.exists()){
     file.delete();
 }  

Currently in all our project we create a static method in some util class to wrap this code. Is there some other way to achieve the same , so that we not need to copy our utils file in every other project.

Java Solutions


Solution 1 - Java

Starting from Java 7 you can use deleteIfExists that returns a boolean (or throw an Exception) depending on whether a file was deleted or not. This method may not be atomic with respect to other file system operations. Moreover if a file is in use by JVM/other program then on some operating system it will not be able to remove it. Every file can be converted to path via toPath method . E.g.

File file = ...;
boolean result = Files.deleteIfExists(file.toPath()); //surround it in try catch block

Solution 2 - Java

file.delete();

if the file doesn't exist, it will return false.

Solution 3 - Java

There's also the Java 7 solution, using the new(ish) Path abstraction:

Path fileToDeletePath = Paths.get("fileToDelete_jdk7.txt");
Files.delete(fileToDeletePath);

Hope this helps.

Solution 4 - Java

Apache Commons IO's FileUtils offers FileUtils.deleteQuietly:

> Deletes a file, never throwing an exception. If file is a directory, delete it and all sub-directories. > The difference between File.delete() and this method are: > > * A directory to be deleted does not have to be empty. > * No exceptions are thrown when a file or directory cannot be deleted.

This offers a one-liner delete call that won't complain if the file fails to be deleted:

FileUtils.deleteQuietly(new File("test.txt"));

Solution 5 - Java

I was working on this type of function, maybe this will interests some of you ...

public boolean deleteFile(File file) throws IOException {
	if (file != null) {
		if (file.isDirectory()) {
			File[] files = file.listFiles();

			for (File f: files) {
				deleteFile(f);
			}
		}
		return Files.deleteIfExists(file.toPath());
	}
	return false;
}

Solution 6 - Java

Use the below statement to delete any files:

FileUtils.forceDelete(FilePath);

Note: Use exception handling codes if you want to use.

Solution 7 - Java

Use Apache Commons FileUtils.deleteDirectory() or FileUtils.forceDelete() to log exceptions in case of any failures,

or FileUtils.deleteQuietly() if you're not concerned about exceptions thrown.

Solution 8 - Java

if you have the file inside a dirrectory called uploads in your project. bellow code can be used.

Path root = Paths.get("uploads");
File existingFile = new File(this.root.resolve("img.png").toUri());

if (existingFile.exists() && existingFile.isFile()) {
     existingFile.delete();
   }

OR

If it is inside a different directory this solution can be used.

File existingFile = new File("D:\\<path>\\img.png");

if (existingFile.exists() && existingFile.isFile()) {
    existingFile.delete();
  }

Solution 9 - Java

Generally We create the File object and check if File Exist then delete.

File f1 = new File("answer.txt");
if(f1.exists()) { 
    f1.delete();
}

OR

File f2 = new File("answer.txt");
f2.deleteOnExit();

If you are uses the Apache Common then below are the option using which you can delete file and directory

File f3 = new File("answer.txt");
FileUtils.deleteDirectory(f3);

This method throws the exception in case of any failure.

OR

 File f4 = new File("answer.txt");
 FileUtils.deleteQuietly(f4);

This method will not throw any exception.

Solution 10 - Java

This is my solution:

File f = new File("file.txt");
if(f.exists() && !f.isDirectory()) { 
	f.delete();
}

Solution 11 - Java

  File xx = new File("filename.txt");
    if (xx.exists()) {
       System.gc();//Added this part
	   Thread.sleep(2000);////This part gives the Bufferedreaders and the InputStreams time to close Completely
       xx.delete();     
    }

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMichal ChmiView Question on Stackoverflow
Solution 1 - Javasol4meView Answer on Stackoverflow
Solution 2 - JavaMartijn CourteauxView Answer on Stackoverflow
Solution 3 - JavaEugenView Answer on Stackoverflow
Solution 4 - JavaS WilliamsView Answer on Stackoverflow
Solution 5 - JavaeverblackView Answer on Stackoverflow
Solution 6 - JavaRANA DINESHView Answer on Stackoverflow
Solution 7 - JavaSourabh BhavsarView Answer on Stackoverflow
Solution 8 - JavaChamod PathiranaView Answer on Stackoverflow
Solution 9 - JavaDarshan GandhiView Answer on Stackoverflow
Solution 10 - Javajava_joeView Answer on Stackoverflow
Solution 11 - Javayogesh rajguruView Answer on Stackoverflow