diff --git a/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java b/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java index 48ae7f8..d4d3e46 100644 --- a/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java +++ b/src/main/java/com/threerings/getdown/classpath/cache/GarbageCollector.java @@ -30,8 +30,11 @@ public class GarbageCollector } File folder = file.getParentFile(); - if (folder.list().length == 0) { - FileUtil.deleteHarder(folder); + if (folder != null) { + String[] children = folder.list(); + if (children != null && children.length == 0) { + FileUtil.deleteHarder(folder); + } } } }); diff --git a/src/main/java/com/threerings/getdown/util/FileUtil.java b/src/main/java/com/threerings/getdown/util/FileUtil.java index 720b05a..9d6f2ef 100644 --- a/src/main/java/com/threerings/getdown/util/FileUtil.java +++ b/src/main/java/com/threerings/getdown/util/FileUtil.java @@ -187,14 +187,20 @@ public class FileUtil */ public static void walkTree (File root, Visitor visitor) { - Deque stack = new ArrayDeque<>(Arrays.asList(root.listFiles())); - while (!stack.isEmpty()) { - File currentFile = stack.pop(); - if (currentFile.exists()) { - visitor.visit(currentFile); - if (currentFile.isDirectory()) { - for (File file: currentFile.listFiles()) { - stack.push(file); + File[] children = root.listFiles(); + if (children != null) { + Deque stack = new ArrayDeque<>(Arrays.asList(children)); + while (!stack.isEmpty()) { + File currentFile = stack.pop(); + if (currentFile.exists()) { + visitor.visit(currentFile); + if (currentFile.isDirectory()) { + File[] currentChildren = currentFile.listFiles(); + if (currentChildren != null) { + for (File file : currentChildren) { + stack.push(file); + } + } } } }