|
51 | 51 | import java.nio.channels.SeekableByteChannel;
|
52 | 52 | import java.nio.file.AccessMode;
|
53 | 53 | import java.nio.file.DirectoryStream;
|
| 54 | +import java.nio.file.FileVisitResult; |
54 | 55 | import java.nio.file.Files;
|
55 | 56 | import java.nio.file.LinkOption;
|
56 | 57 | import java.nio.file.NotDirectoryException;
|
57 | 58 | import java.nio.file.OpenOption;
|
58 | 59 | import java.nio.file.Path;
|
59 | 60 | import java.nio.file.Paths;
|
| 61 | +import java.nio.file.SimpleFileVisitor; |
60 | 62 | import java.nio.file.StandardOpenOption;
|
| 63 | +import java.nio.file.attribute.BasicFileAttributes; |
61 | 64 | import java.nio.file.attribute.FileAttribute;
|
62 | 65 | import java.nio.file.attribute.FileTime;
|
63 | 66 | import java.util.ArrayList;
|
|
74 | 77 |
|
75 | 78 | import org.graalvm.polyglot.io.FileSystem;
|
76 | 79 |
|
77 |
| -public final class VirtualFileSystem implements FileSystem { |
| 80 | +public final class VirtualFileSystem implements FileSystem, AutoCloseable { |
78 | 81 |
|
79 | 82 | /*
|
80 | 83 | * Root of the virtual filesystem in the resources.
|
@@ -165,6 +168,28 @@ public VirtualFileSystem(Predicate<Path> extractFilter) {
|
165 | 168 | }
|
166 | 169 | }
|
167 | 170 |
|
| 171 | + public void close() { |
| 172 | + if (extractDir != null) { |
| 173 | + try { |
| 174 | + Files.walkFileTree(extractDir, new SimpleFileVisitor<Path>() { |
| 175 | + @Override |
| 176 | + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { |
| 177 | + Files.delete(file); |
| 178 | + return FileVisitResult.CONTINUE; |
| 179 | + } |
| 180 | + |
| 181 | + @Override |
| 182 | + public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { |
| 183 | + Files.delete(dir); |
| 184 | + return FileVisitResult.CONTINUE; |
| 185 | + } |
| 186 | + }); |
| 187 | + } catch (IOException e) { |
| 188 | + System.err.format("Could not delete temp directory '%s': %s", extractDir, e); |
| 189 | + } |
| 190 | + } |
| 191 | + } |
| 192 | + |
168 | 193 | public static boolean isWindows() {
|
169 | 194 | return System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("windows");
|
170 | 195 | }
|
|
0 commit comments