コピーするときと同様に、Java7 でファイルを再帰的に削除するプログラムを書く。
※ Files.delete() でディレクトリーを削除する場合、ディレクトリーは空でないといけない。
Java7 以上
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
private void delete(String target) throws IOException { Path targetPath = Paths.get(target); Files.walkFileTree(targetPath, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Files.delete(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException { if (e == null) { Files.delete(dir); return FileVisitResult.CONTINUE; } else { // directory iteration failed throw e; } } }); } public static void delete(File path) { if (path == null || !path.exists()) { return; } if (path.isFile()) { if (path.exists() && !path.delete() ) { // 削除に失敗したら、仮想マシンが終了したときに削除するよう設定 path.deleteOnExit(); } // ディレクトリーの場合 } else { File[] list = path.listFiles(); for ( int i = 0 ; i < list.length ; i++ ) { delete(list[i]); } if (path.exists() && !path.delete() ) { // 削除に失敗したら、仮想マシンが終了したときに削除するよう設定 path.deleteOnExit(); } } } |