Java tutorial
//package com.java2s; import java.io.File; import java.io.FileFilter; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collection; import java.util.LinkedList; public class Main { private static final char SYSTEM_SEPARATOR = File.separatorChar; public static void deleteDirectory(File directory) throws IOException { if (!directory.exists()) { return; } if (!isSymlink(directory)) { cleanDirectory(directory); } if (!directory.delete()) { String message = "Unable to delete directory " + directory + "."; throw new IOException(message); } } public static boolean isSymlink(File file) throws IOException { if (file == null) { throw new NullPointerException("File must not be null"); } if (isSystemWindows()) { return false; } File fileInCanonicalDir = null; if (file.getParent() == null) { fileInCanonicalDir = file; } else { File canonicalDir = file.getParentFile().getCanonicalFile(); fileInCanonicalDir = new File(canonicalDir, file.getName()); } return !fileInCanonicalDir.getCanonicalFile().equals(fileInCanonicalDir.getAbsoluteFile()); } public static void cleanDirectory(File directory) throws IOException { if (!directory.exists()) { String message = directory + " does not exist"; throw new IllegalArgumentException(message); } if (!directory.isDirectory()) { String message = directory + " is not a directory"; throw new IllegalArgumentException(message); } File[] files = directory.listFiles(); if (files == null) { throw new IOException("Failed to list contents of " + directory); } IOException exception = null; for (File file : files) { try { forceDelete(file); } catch (IOException ioe) { exception = ioe; } } if (null != exception) throw exception; } static boolean isSystemWindows() { return SYSTEM_SEPARATOR == '\\'; } public static Collection<File> listFiles(File directory, String suffix) { final String _suffix = "." + suffix; FileFilter filter = new FileFilter() { @Override public boolean accept(File file) { if (file.isDirectory()) return true; String name = file.getName(); int endLen = _suffix.length(); if (name.regionMatches(true, name.length() - endLen, _suffix, 0, endLen)) { return true; } return false; } }; if (!directory.isDirectory()) { throw new IllegalArgumentException("Parameter 'directory' is not a directory"); } if (filter == null) { throw new NullPointerException("Parameter 'fileFilter' is null"); } Collection<File> files = new LinkedList<File>(); innerListFiles(files, directory, filter); return files; } public static void forceDelete(File file) throws IOException { if (file.isDirectory()) { deleteDirectory(file); } else { boolean filePresent = file.exists(); if (!file.delete()) { if (!filePresent) { throw new FileNotFoundException("File does not exist: " + file); } String message = "Unable to delete file: " + file; throw new IOException(message); } } } private static void innerListFiles(Collection<File> files, File directory, FileFilter filter) { File[] found = directory.listFiles(filter); if (found != null) for (File file : found) if (file.isDirectory()) innerListFiles(files, file, filter); else files.add(file); } }