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