import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.ArrayList;
import org.simantics.db.Resource;
// Make sure that index-base is a valid directory
if (DEBUG)
System.out.println(indexBase + " is not a directory! Removing it.");
- FileUtils.deleteAll(indexBase);
- indexBase.mkdirs();
+ Path base = indexBase.toPath();
+ FileUtils.emptyDirectory(base);
+ Files.createDirectories(base);
return;
}
File allDirtyFile = getAllDirtyFile();
return read;
}
- public static void delete(Path databaseLocation) throws IOException {
- Files.walkFileTree(databaseLocation, new DeleteDirectoriesVisitor());
+ public static void delete(Path path) throws IOException {
+ if (Files.exists(path))
+ Files.walkFileTree(path, new DeleteDirectoriesVisitor());
}
-
+
+ /**
+ * Empties the specified directory but does not delete the directory itself.
+ * If a non-directory path is given, it is simply deleted.
+ *
+ * @param path
+ * @throws IOException
+ */
+ public static void emptyDirectory(Path path) throws IOException {
+ if (Files.isDirectory(path))
+ Files.walkFileTree(path, new EmptyDirectoryVisitor());
+ else
+ Files.deleteIfExists(path);
+ }
+
public static void copy(Path from, Path to) throws IOException {
Files.walkFileTree(from, new CopyDirectoriesVisitor(from, to));
}
-
+
public static class DeleteDirectoriesVisitor extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
- Files.delete(file);
- if (Files.exists(file))
- throw new IOException("Could not delete file " + file.toAbsolutePath().toString());
+ Files.deleteIfExists(file);
return FileVisitResult.CONTINUE;
}
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
if (exc != null)
throw exc;
- Files.delete(dir);
- if (Files.exists(dir))
- throw new IOException("Could not delete file " + dir.toAbsolutePath().toString());
+ Files.deleteIfExists(dir);
return FileVisitResult.CONTINUE;
}
}
-
+
+ private static class EmptyDirectoryVisitor extends SimpleFileVisitor<Path> {
+ int depth = 0;
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.deleteIfExists(file);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+ ++depth;
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ if (exc != null)
+ throw exc;
+ if (--depth > 0)
+ Files.deleteIfExists(dir);
+ return FileVisitResult.CONTINUE;
+ }
+ }
+
public static class CopyDirectoriesVisitor extends SimpleFileVisitor<Path> {
private final Path fromPath;