X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=inline;f=src%2Fbe%2Fnikiroo%2Futils%2FIOUtils.java;h=d83311449c3bb5016ae35b396284f56822786ee0;hb=cc3e72914add9c950f563bf37c6615e8721ad32e;hp=35481b2cf0d1576e68814191296b3d8fdafca25d;hpb=3f8349b761d29cd3d5381f076d706014574eeb43;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/IOUtils.java b/src/be/nikiroo/utils/IOUtils.java index 35481b2..d833114 100644 --- a/src/be/nikiroo/utils/IOUtils.java +++ b/src/be/nikiroo/utils/IOUtils.java @@ -1,6 +1,7 @@ package be.nikiroo.utils; import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -9,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; @@ -86,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()) { @@ -193,19 +200,54 @@ public class IOUtils { * in case of I/O error */ public static String readSmallStream(InputStream stream) throws IOException { + // do NOT close the reader, or the related stream will be closed, too + // reader.close(); BufferedReader reader = new BufferedReader( new InputStreamReader(stream)); - try { - StringBuilder builder = new StringBuilder(); - for (String line = reader.readLine(); line != null; line = reader - .readLine()) { - builder.append(line); - builder.append("\n"); + + StringBuilder builder = new StringBuilder(); + for (String line = reader.readLine(); line != null; line = reader + .readLine()) { + builder.append(line); + builder.append("\n"); + } + + 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
+ * 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 void deltree(File target) {
+ public static List