I wonder if we can't have a single implementation of the whole class:

  public static final int NONE = 0;
  public static final int RECURSIVE = 1;
  public static final int RETRY = 2;

  public static void delete(File f) {
    delete(f, NONE);
  }

  public static void delete(File f, int options) {
    if ((options & RECURSIVE) != 0 && f.isDirectory()) {
      final File[] items = f.listFiles();
      if (items != null) {
        for (File c : items)
          delete(c, options);
      }
    }

    if (!f.delete() && (options & RETRY) != 0 && f.exists()) {
      for (int i = 1; i < 10; i++) {
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          throw new InterruptedIOException();
        }

        if (f.delete())
          return;
      }
    }

    throw new IOException();
  }