X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FIOUtils.java;h=d83311449c3bb5016ae35b396284f56822786ee0;hb=620f732927beb44ba33d35cc47646ec53b5f535b;hp=f857850dea11db8d4185fd21ad226b86380cc034;hpb=805005449dacb1e7b825db63836bf100e472ddd0;p=fanfix.git diff --git a/src/be/nikiroo/utils/IOUtils.java b/src/be/nikiroo/utils/IOUtils.java index f857850..d833114 100644 --- a/src/be/nikiroo/utils/IOUtils.java +++ b/src/be/nikiroo/utils/IOUtils.java @@ -10,6 +10,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -87,8 +89,12 @@ public class IOUtils { } zip.putNextEntry(new ZipEntry(base + "/")); } - for (File file : target.listFiles()) { - zip(zip, base, file, false); + + File[] files = target.listFiles(); + if (files != null) { + for (File file : files) { + zip(zip, base, file, false); + } } } else { if (base == null || base.isEmpty()) { @@ -209,6 +215,41 @@ public class IOUtils { return builder.toString(); } + /** + * Recursively delete the given {@link File}, which may of course also be a + * directory. + *

+ * Will either silently continue or throw an exception in case of error, + * depending upon the parameters. + * + * @param target + * the target to delete + * @param exception + * TRUE to throw an {@link IOException} in case of error, FALSE + * to silently continue + * + * @return TRUE if all files were deleted, FALSE if an error occurred + * + * @throws IOException + * if an error occurred and the parameters allow an exception to + * be thrown + */ + public static boolean deltree(File target, boolean exception) + throws IOException { + List list = deltree(target, null); + if (exception && !list.isEmpty()) { + StringBuilder slist = new StringBuilder(); + for (File file : list) { + slist.append("\n").append(file.getPath()); + } + + throw new IOException("Cannot delete all the files from: <" // + + target + ">:" + slist.toString()); + } + + return list.isEmpty(); + } + /** * Recursively delete the given {@link File}, which may of course also be a * directory. @@ -217,18 +258,44 @@ public class IOUtils { * * @param target * the target to delete + * + * @return TRUE if all files were deleted, FALSE if an error occurred */ - public static void deltree(File target) { + public static boolean deltree(File target) { + return deltree(target, null).isEmpty(); + } + + /** + * Recursively delete the given {@link File}, which may of course also be a + * directory. + *

+ * Will collect all {@link File} that cannot be deleted in the given + * accumulator. + * + * @param target + * the target to delete + * @param errorAcc + * the accumulator to use for errors, or NULL to create a new one + * + * @return the errors accumulator + */ + public static List deltree(File target, List errorAcc) { + if (errorAcc == null) { + errorAcc = new ArrayList(); + } + File[] files = target.listFiles(); if (files != null) { for (File file : files) { - deltree(file); + errorAcc = deltree(file, errorAcc); } } if (!target.delete()) { - System.err.println("Cannot delete: " + target.getAbsolutePath()); + errorAcc.add(target); } + + return errorAcc; } /**