src/share/classes/org/openjdk/jigsaw/Files.java

Print this page

        

@@ -24,14 +24,22 @@
  */
 
 package org.openjdk.jigsaw;
 
 import java.io.*;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.nio.file.FileVisitor;
+import java.nio.file.FileVisitResult;
+import java.nio.file.NoSuchFileException;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.jar.*;
 import java.util.zip.*;
 import static java.nio.file.StandardCopyOption.COPY_ATTRIBUTES;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+import static java.lang.String.format;
 
 public final class Files {
 
     private Files() { }
 

@@ -107,10 +115,59 @@
             }
         }
         delete(dst);
     }
 
+    static List<IOException> deleteAllUnchecked(Path dir) {
+        final List<IOException> excs = new ArrayList<>();
+        try {
+            java.nio.file.Files.walkFileTree(dir, new FileVisitor<Path>() {
+                @Override
+                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
+                    return FileVisitResult.CONTINUE;
+                }
+                @Override
+                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
+                    try {
+                        java.nio.file.Files.delete(file);
+                    } catch (IOException x) {
+                        excs.add(new IOException(format("Unable to delete %s: %s\n", file, x)));
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+                @Override
+                public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
+                    try {
+                        java.nio.file.Files.delete(dir);
+                    } catch (IOException x) {
+                        excs.add(new IOException(format("Unable to delete %s: %s\n", dir, x)));
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+                @Override
+                public FileVisitResult visitFileFailed(Path file, IOException exc) {
+                    excs.add(new IOException(format("Unable to visit %s: %s\n", file, exc)));
+                    return FileVisitResult.CONTINUE;
+                }
+            });
+        } catch (IOException x) {
+            excs.add(x);
+        }
+        return excs;
+    }
+
+    static IOException deleteUnchecked(Path file)
+    {
+        try {
+            java.nio.file.Files.delete(file);
+        } catch (IOException exc) {
+            return new IOException(format("Unable to delete %s: %s\n", file, exc));
+        }
+        return null;
+    }
+
+
     private static void copy(File src, File dst)
         throws IOException
     {
         java.nio.file.Files.copy(src.toPath(), dst.toPath(),
                                  COPY_ATTRIBUTES, REPLACE_EXISTING);