Delete all files in a directory in Java
This post will discuss how to delete all files in a directory in Java.
1. Using FileUtils class
The FileUtils class from Apache Commons IO offers several handy file manipulation utilities. You can use the FileUtils.cleanDirectory() method to recursively delete all files and subdirectories within a directory, without deleting the directory itself.
|
1 2 3 4 5 6 7 8 9 10 11 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { File directory = new File("/path/to/dir"); FileUtils.cleanDirectory(directory); } } |
To delete a directory recursively and everything in it, you can use the FileUtils.deleteDirectory() method.
|
1 2 3 4 5 6 7 8 9 10 11 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { File directory = new File("/path/to/dir"); FileUtils.deleteDirectory(directory); } } |
Alternatively, you can use the FileUtils.forceDelete() method to delete a directory and all subdirectories.
|
1 2 3 4 5 6 7 8 9 10 11 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { File directory = new File("/path/to/dir"); FileUtils.forceDelete(directory); } } |
2. Using File.delete() method
The File.delete() method deletes the file or directory denoted by the specified pathname. There are numerous ways to conditionally delete files and subdirectories in a directory using it.
For instance, the following solution only deletes files within the main directory, and all subdirectories remain untouched.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.io.File; import java.util.Objects; public class Main { public static void main(String[] args) { File directory = new File("/path/to/dir"); for (File file: Objects.requireNonNull(directory.listFiles())) { if (!file.isDirectory()) { file.delete(); } } } } |
If you use Java 8 or above, you can use:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.io.File; import java.util.Arrays; import java.util.Objects; import java.util.function.Predicate; public class Main { public static void deleteDirectory(File directory) { Arrays.stream(Objects.requireNonNull(directory.listFiles())) .filter(Predicate.not(File::isDirectory)) .forEach(File::delete); } public static void main(String[] args) { File directory = new File("/path/to/dir"); deleteDirectory(directory); } } |
You can easily extend the solution to recursively delete all files and subdirectories within a directory. Note that you can delete a directory using the File.delete() method if and only if the directory is empty.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.File; import java.util.Objects; public class Main { public static void deleteDirectory(File directory) { for (File file: Objects.requireNonNull(directory.listFiles())) { if (file.isDirectory()) { deleteDirectory(file); } else { file.delete(); } } } public static void main(String[] args) { File directory = new File("/path/to/dir"); deleteDirectory(directory); } } |
Here’s a version using the Stream API. It takes advantage of the Files.walk() method and deletes all files and subdirectories within a directory, along with the directory itself.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.Comparator; public class Main { public static void deleteDirectory(Path directory) throws IOException { Files.walk(directory) .sorted(Comparator.reverseOrder()) .map(Path::toFile) .forEach(File::delete); } public static void main(String[] args) throws IOException { Path directory = Path.of("/path/to/dir"); deleteDirectory(directory); } } |
If you need to delete “only files” from the directory and all its subdirectories, you can do as follows:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; public class Main { public static void deleteDirectory(File directory) throws IOException { Files.walk(directory.toPath()) .filter(Files::isRegularFile) .map(Path::toFile) .forEach(File::delete); } public static void main(String[] args) throws IOException { File directory = new File("/path/to/dir"); deleteDirectory(directory); } } |
That’s all about deleting all files in a directory in Java.
Thanks for reading.
To share your code in the comments, please use our online compiler that supports C, C++, Java, Python, JavaScript, C#, PHP, and many more popular programming languages.
Like us? Refer us to your friends and support our growth. Happy coding :)