package ru.aristar.test; import java.io.*; import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; class CleanerFileVisitor implements FileVisitor { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { return FileVisitResult.TERMINATE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { File[] subItems = dir.toFile().listFiles(); for (File child : subItems) {} return FileVisitResult.CONTINUE; } } class LeakCleanerFileVisitor implements FileVisitor { @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { return FileVisitResult.TERMINATE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { Files.list(dir).forEach((p) -> {}); return FileVisitResult.CONTINUE; } } public class Main { public static void main(String[] args) throws IOException { final Path rootFolder = Paths.get(args[1]); if (args[0].equals("-prepare")) { prepareFolders(rootFolder); } FileVisitor cleanerFileVisitor; if (args[0].equals("N")) { cleanerFileVisitor = new CleanerFileVisitor(); } else if (args[0].equals("L")) { cleanerFileVisitor = new LeakCleanerFileVisitor(); } else { return; } for (int i = 0; ; i++) { System.out.printf("ITERATION %d\n", i); Files.walkFileTree(rootFolder, cleanerFileVisitor); } } private static void prepareFolders(Path folder) throws IOException { prepareFolders(folder, 10); } private static void prepareFolders(Path folder, int level) throws IOException { if (level > 0) { for (int i = 0; i < 1000; i++) { Path childFolder = folder.resolve(Integer.toString(i)); Files.createDirectories(childFolder); prepareFolders(childFolder, level - 1); } } else { for (int i = 0; i < 1000; i++) { Path file = folder.resolve("F" + i + ".dat"); Files.createFile(file); } } } }