File Input Output Java

import java.io.File;
import java.io.IOException;
public class Utils {
  /**
   * delete all files under this file and including this file
   * 
   * @param f
   * @throws IOException
   */
  public static void deleteAll(File f) throws IOException {
    recurse(f, new RecurseAction() {
      public void doFile(File file) throws IOException {
        file.delete();
        if (file.exists()) {
          throw new IOException("Failed to delete  " + file.getPath());
        }
      }
      public void doBeforeFile(File f) {
      }
      public void doAfterFile(File f) {
      }
    });
  }
  public static void recurse(File f, RecurseAction action) throws IOException {
    action.doBeforeFile(f);
    if (f.isDirectory()) {
      File[] files = f.listFiles();
      if (files != null) {
        for (int i = 0; i < files.length; i++) {
          if (files[i].isDirectory()) {
            recurse(files[i], action);
          } else {
            action.doFile(files[i]);
          }
        }
      }
    }
    action.doFile(f);
  }
}
interface RecurseAction {
  /**
   * @param file
   * @throws IOException
   */
  void doFile(File file) throws IOException;
  /**
   * @param f
   */
  void doBeforeFile(File f);
  /**
   * @param f
   */
  void doAfterFile(File f);
}