X-Git-Url: http://git.nikiroo.be/?p=fanfix.git;a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FIOUtils.java;h=3d252eac126df091a7fa8abf55999d95af6f288f;hp=9cdaba840af79727fba495b2095af03cf5918c2f;hb=HEAD;hpb=e378894c40d45740da6498fe9020e7628d485e35 diff --git a/src/be/nikiroo/utils/IOUtils.java b/src/be/nikiroo/utils/IOUtils.java index 9cdaba8..3d252ea 100644 --- a/src/be/nikiroo/utils/IOUtils.java +++ b/src/be/nikiroo/utils/IOUtils.java @@ -13,6 +13,8 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; +import be.nikiroo.utils.streams.MarkableFileInputStream; + /** * This class offer some utilities based around Streams and Files. * @@ -27,13 +29,15 @@ public class IOUtils { * @param target * the target {@link File} * + * @return the number of bytes written + * * @throws IOException * in case of I/O error */ - public static void write(InputStream in, File target) throws IOException { + public static long write(InputStream in, File target) throws IOException { OutputStream out = new FileOutputStream(target); try { - write(in, out); + return write(in, out); } finally { out.close(); } @@ -47,17 +51,23 @@ public class IOUtils { * @param out * the target {@link OutputStream} * + * @return the number of bytes written + * * @throws IOException * in case of I/O error */ - public static void write(InputStream in, OutputStream out) + public static long write(InputStream in, OutputStream out) throws IOException { + long written = 0; byte buffer[] = new byte[4096]; int len = in.read(buffer); - while (len > 0) { + while (len > -1) { out.write(buffer, 0, len); + written += len; len = in.read(buffer); } + + return written; } /** @@ -230,7 +240,7 @@ public class IOUtils { throws IOException { FileOutputStream out = new FileOutputStream(file); try { - out.write(content.getBytes("UTF-8")); + out.write(StringUtils.getBytes(content)); } finally { out.close(); } @@ -273,8 +283,7 @@ public class IOUtils { write(stream, out); return out.toString("UTF-8"); } finally { - // do NOT close, or the related stream will be closed, too - // out.close(); + out.close(); } } @@ -361,13 +370,30 @@ public class IOUtils { return errorAcc; } + /** + * Open the resource next to the given {@link Class}. + * + * @param location + * the location where to look for the resource + * @param name + * the resource name (only the filename, no path) + * + * @return the opened resource if found, NULL if not + */ + public static InputStream openResource( + @SuppressWarnings("rawtypes") Class location, String name) { + String loc = location.getName().replace(".", "/") + .replaceAll("/[^/]*$", "/"); + return openResource(loc + name); + } + /** * Open the given /-separated resource (from the binary root). * * @param name - * the resource name + * the resource name (the full path, with "/" as separator) * - * @return the opened resource if found, NLL if not + * @return the opened resource if found, NULL if not */ public static InputStream openResource(String name) { ClassLoader loader = IOUtils.class.getClassLoader(); @@ -408,19 +434,11 @@ public class IOUtils { write(in, tmp); in.close(); - final FileInputStream fis = new FileInputStream(tmp); - return new MarkableFileInputStream(fis) { + return new MarkableFileInputStream(tmp) { @Override public void close() throws IOException { try { - try { - super.close(); - } finally { - try { - fis.close(); - } catch (IOException e) { - } - } + super.close(); } finally { tmp.delete(); }