Per cancellare una directory non vuota in modo ricorsivo uso questo metodo:

codice:
public boolean deleteFolderError(File pathXML) throws IOException  {          if (!pathXML.isDirectory()) {             throw new IOException("Not a directory " + pathXML);         }          File[] files = pathXML.listFiles();         for (int i = 0; i < files.length; i++) {             File file = files[i];              if (file.isDirectory()) {                 deleteFolderError(file);             } else {                 if ( !file.canWrite()){                     throw new IOException("File protetto da scrittura. Riprovare nuovamente." + file);                 }                 boolean deleted = file.delete();                 if (!deleted) {                     throw new IOException("Unable to delete file" + file);                 }             }     }      return (pathXML.delete());
Il problema è il seguente, riesco a cancellare tutte le sottodirectory con i relativi file presenti nelle directory, ma quando tento di cancellare l'unico file presente nella dir passata al metodo non cancella.
Esempio:
pathXML = "c:\prova"
in "c:\prova" ci sono un file scartato.xml e una dir prova2 con n sottodir e files.
Riesco a cancellare tutta la dir prova2, ma quando tento di cancellare il file scartato.xml con
boolean deleted = file.deleted(); mi restituisce false. Ovviamente il path è giusto.
La cosa strana è che se tento di cancellare nuovamente il file ci riesco!!
Come potete vedere dal codice controllo anche se il file è protetto da scrittura.

Grazie Piccolognu