New: new functions in UiUtils and IOUtils
[nikiroo-utils.git] / src / be / nikiroo / utils / IOUtils.java
index e3837e17ed76c8b4bdb9274edf9524182856542a..439964dfc11dee8a317bf4e63a5251deaef7f17f 100644 (file)
@@ -370,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();
@@ -386,6 +403,34 @@ public class IOUtils {
 
                return loader.getResourceAsStream(name);
        }
+       
+       /**
+        * Return the running directory/file, that is, the root binary directory for
+        * running java classes or the running JAR file for JAR files.
+        * 
+        * @param clazz
+        *            a Class from the running program (will only have an impact
+        *            when not running from a JAR file)
+        * @param base
+        *            return the base directory (the one where the binary root or
+        *            the JAR file resides)
+        * 
+        * @return the directory or file
+        */
+       public static File getRunningDirectory(
+                       @SuppressWarnings("rawtypes") Class clazz, boolean base) {
+               String uri = clazz.getProtectionDomain().getCodeSource().getLocation()
+                               .toString();
+               if (uri.startsWith("file:"))
+                       uri = uri.substring("file:".length());
+               File root = new File(uri);
+
+               if (base) {
+                       root = root.getParentFile();
+               }
+
+               return root;
+       }
 
        /**
         * Return a resetable {@link InputStream} from this stream, and reset it.