@@ -286,8 +286,9 @@ public boolean isEmpty(){
286286 //**************************************************************************
287287 //** Create Directory
288288 //**************************************************************************
289- /** Used to create the directory. */
290-
289+ /** Used to create the directory. Returns true if the directory was
290+ * successfully created.
291+ */
291292 public boolean create (){
292293 return getFile ().mkdirs ();
293294 }
@@ -296,9 +297,70 @@ public boolean create(){
296297 //**************************************************************************
297298 //** Delete Directory
298299 //**************************************************************************
299- /** Used to delete the directory. */
300-
300+ /** Used to delete the directory. Returns true if the directory was
301+ * successfully deleted.
302+ */
301303 public boolean delete (){
304+
305+
306+ //Delete files and generate an ordered list of subfolders
307+ TreeMap <Integer , HashSet <java .io .File >> paths = new TreeMap <>();
308+ List files = getChildren (true , null , false );
309+ Object obj ;
310+ while (true ){
311+ synchronized (files ) {
312+ while (files .isEmpty ()) {
313+ try {
314+ files .wait ();
315+ }
316+ catch (InterruptedException e ) {
317+ break ;
318+ }
319+ }
320+ obj = files .remove (0 );
321+ files .notifyAll ();
322+ }
323+
324+
325+ if (obj ==null ){ //file search is complete
326+ break ;
327+ }
328+ else {
329+ if (obj instanceof javaxt .io .File ){
330+ javaxt .io .File f = (javaxt .io .File ) obj ;
331+ f .delete ();
332+ }
333+ else {
334+ javaxt .io .Directory dir = (javaxt .io .Directory ) obj ;
335+
336+ int numFolders = 0 ;
337+ javaxt .io .Directory d = dir .clone ();
338+ while (!d .equals (this )){
339+ d = d .getParentDirectory ();
340+ numFolders ++;
341+ }
342+
343+
344+ HashSet <java .io .File > set = paths .get (numFolders );
345+ if (set ==null ){
346+ set = new HashSet <>();
347+ paths .put (numFolders , set );
348+ }
349+ set .add (dir .toFile ());
350+ }
351+ }
352+ }
353+
354+
355+ //Delete subfolders
356+ for (Integer numFolders : paths .descendingKeySet ()){
357+ for (java .io .File d : paths .get (numFolders )){
358+ d .delete ();
359+ }
360+ }
361+
362+
363+
302364 if (getFile ().delete ()){
303365 attr = null ;
304366 return true ;
0 commit comments