< prev index next >

test/lib/testlibrary/jdk/testlibrary/FileUtils.java

Print this page
rev 1531 : 8171415: Remove Java 7 features from testlibrary
Reviewed-by: omajid

*** 21,38 **** * questions. */ package jdk.testlibrary; import java.io.IOException; - import java.nio.file.DirectoryNotEmptyException; - import java.nio.file.FileVisitResult; - import java.nio.file.Files; - import java.nio.file.NoSuchFileException; - import java.nio.file.Path; - import java.nio.file.SimpleFileVisitor; - import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; /** --- 21,32 ---- * questions. */ package jdk.testlibrary; + import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; /**
*** 56,66 **** * if the file is a directory and could not otherwise be deleted * because the directory is not empty (optional specific exception) * @throws IOException * if an I/O error occurs */ ! public static void deleteFileWithRetry(Path path) throws IOException { try { deleteFileWithRetry0(path); } catch (InterruptedException x) { --- 50,60 ---- * if the file is a directory and could not otherwise be deleted * because the directory is not empty (optional specific exception) * @throws IOException * if an I/O error occurs */ ! public static void deleteFileWithRetry(File path) throws IOException { try { deleteFileWithRetry0(path); } catch (InterruptedException x) {
*** 80,129 **** * if the file is a directory and could not otherwise be deleted * because the directory is not empty (optional specific exception) * @throws IOException * if an I/O error occurs */ ! public static void deleteFileIfExistsWithRetry(Path path) throws IOException { try { ! if(Files.exists(path)) deleteFileWithRetry0(path); } catch (InterruptedException x) { throw new IOException("Interrupted while deleting.", x); } } ! private static void deleteFileWithRetry0(Path path) throws IOException, InterruptedException { int times = 0; ! IOException ioe = null; ! while (true) { ! try { ! Files.delete(path); ! while (Files.exists(path)) { times++; if (times > MAX_RETRY_DELETE_TIMES) throw new IOException("File still exists after " + times + " waits."); Thread.sleep(RETRY_DELETE_MILLIS); ! } ! break; ! } catch (NoSuchFileException | DirectoryNotEmptyException x) { ! throw x; ! } catch (IOException x) { ! // Backoff/retry in case another process is accessing the file ! times++; ! if (ioe == null) ! ioe = x; ! else ! ioe.addSuppressed(x); ! ! if (times > MAX_RETRY_DELETE_TIMES) ! throw ioe; ! Thread.sleep(RETRY_DELETE_MILLIS); ! } } } /** * Deletes a directory and its subdirectories, retrying if necessary. --- 74,105 ---- * if the file is a directory and could not otherwise be deleted * because the directory is not empty (optional specific exception) * @throws IOException * if an I/O error occurs */ ! public static void deleteFileIfExistsWithRetry(File path) throws IOException { try { ! if (path.exists()) deleteFileWithRetry0(path); } catch (InterruptedException x) { throw new IOException("Interrupted while deleting.", x); } } ! private static void deleteFileWithRetry0(File path) throws IOException, InterruptedException { int times = 0; ! boolean result = path.delete(); ! while (!result) { times++; if (times > MAX_RETRY_DELETE_TIMES) throw new IOException("File still exists after " + times + " waits."); Thread.sleep(RETRY_DELETE_MILLIS); ! result = path.delete(); } } /** * Deletes a directory and its subdirectories, retrying if necessary.
*** 135,194 **** * internally. If only one is caught, then it is re-thrown. * If more than one exception is caught, then the second and * following exceptions are added as suppressed exceptions of the * first one caught, which is then re-thrown. */ ! public static void deleteFileTreeWithRetry(Path dir) throws IOException { ! IOException ioe = null; ! final List<IOException> excs = deleteFileTreeUnchecked(dir); ! if (!excs.isEmpty()) { ! ioe = excs.remove(0); ! for (IOException x : excs) ! ioe.addSuppressed(x); ! } ! if (ioe != null) ! throw ioe; ! } ! ! public static List<IOException> deleteFileTreeUnchecked(Path dir) { ! final List<IOException> excs = new ArrayList<>(); ! try { ! java.nio.file.Files.walkFileTree(dir, new SimpleFileVisitor<Path>() { ! @Override ! public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { ! try { ! deleteFileWithRetry0(file); ! } catch (IOException x) { ! excs.add(x); ! } catch (InterruptedException x) { ! excs.add(new IOException("Interrupted while deleting.", x)); ! return FileVisitResult.TERMINATE; ! } ! return FileVisitResult.CONTINUE; ! } ! @Override ! public FileVisitResult postVisitDirectory(Path dir, IOException exc) { ! try { ! deleteFileWithRetry0(dir); ! } catch (IOException x) { ! excs.add(x); ! } catch (InterruptedException x) { ! excs.add(new IOException("Interrupted while deleting.", x)); ! return FileVisitResult.TERMINATE; ! } ! return FileVisitResult.CONTINUE; } - @Override - public FileVisitResult visitFileFailed(Path file, IOException exc) { - excs.add(exc); - return FileVisitResult.CONTINUE; } ! }); ! } catch (IOException x) { ! excs.add(x); ! } ! return excs; } } - --- 111,137 ---- * internally. If only one is caught, then it is re-thrown. * If more than one exception is caught, then the second and * following exceptions are added as suppressed exceptions of the * first one caught, which is then re-thrown. */ ! public static void deleteFileTreeWithRetry(File dir) throws IOException { ! boolean failed = false; ! final List<Boolean> results = deleteFileTreeUnchecked(dir); ! failed = !results.isEmpty(); ! if (failed) ! throw new IOException(); ! } ! ! public static List<Boolean> deleteFileTreeUnchecked(File dir) { ! final List<Boolean> results = new ArrayList<Boolean>(); ! for (File file : dir.listFiles()) { ! if (file.isDirectory()) { ! results.addAll(deleteFileTreeUnchecked(file)); ! } else { ! results.add(file.delete()); } } ! return results; } }
< prev index next >