Class IOUtil


  • public class IOUtil
    extends Object
    • Field Detail

      • DEBUG

        public static final boolean DEBUG
      • tmpSubDir

        public static final String tmpSubDir
        Subdirectory within platform's temporary root directory where all JogAmp related temp files are being stored: jogamp
        See Also:
        Constant Field Values
      • patternSpaceEnc

        public static final Pattern patternSpaceEnc
    • Method Detail

      • copyURLConn2File

        public static int copyURLConn2File​(URLConnection conn,
                                           File outFile)
                                    throws IOException
        Copy the complete specified URL resource to the specified output file. The total number of bytes written is returned.
        Parameters:
        conn - the open URLConnection
        outFile - the destination
        Returns:
        Throws:
        IOException
      • copyStream2File

        public static int copyStream2File​(InputStream in,
                                          File outFile)
                                   throws IOException
        Copy the complete specified input stream to the specified output file. The total number of bytes written is returned.
        Parameters:
        in - the source
        outFile - the destination
        Returns:
        Throws:
        IOException
      • copyStream2Stream

        public static int copyStream2Stream​(InputStream in,
                                            OutputStream out)
                                     throws IOException
        Copy the complete specified input stream to the specified output stream. The total number of bytes written is returned.
        Parameters:
        in - the source
        out - the destination
        Returns:
        Throws:
        IOException
      • copyStream2Stream

        public static int copyStream2Stream​(int bufferSize,
                                            InputStream in,
                                            OutputStream out)
                                     throws IOException
        Copy the complete specified input stream to the specified output stream. The total number of bytes written is returned.
        Parameters:
        bufferSize - the intermediate buffer size, should be MachineDataInfo.pageSizeInBytes() for best performance.
        in - the source
        out - the destination
        Returns:
        Throws:
        IOException
      • copyStream2ByteArray

        public static byte[] copyStream2ByteArray​(InputStream stream)
                                           throws IOException
        Copy the complete specified input stream to a byte array, which is being returned.
        Throws:
        IOException
      • copyStream2ByteBuffer

        public static ByteBuffer copyStream2ByteBuffer​(InputStream stream)
                                                throws IOException
        Copy the complete specified input stream to a NIO ByteBuffer w/ native byte order, which is being returned.
        Parameters:
        stream - input stream, which will be wrapped into a BufferedInputStream, if not already done.
        Throws:
        IOException
      • copyStream2ByteBuffer

        public static ByteBuffer copyStream2ByteBuffer​(InputStream stream,
                                                       int initialCapacity)
                                                throws IOException
        Copy the complete specified input stream to a NIO ByteBuffer w/ native byte order, which is being returned.
        Parameters:
        stream - input stream, which will be wrapped into a BufferedInputStream, if not already done.
        initialCapacity - initial buffer capacity in bytes, if < currently available bytes, initial buffer capacity is set to currently available bytes.
        Throws:
        IOException
      • copyStreamChunk2ByteBuffer

        public static ByteBuffer copyStreamChunk2ByteBuffer​(InputStream stream,
                                                            int skipBytes,
                                                            int byteCount)
                                                     throws IOException
        Copy the specified input stream chunk to a NIO ByteBuffer w/ native byte order, which is being returned.
        Parameters:
        stream - input stream, which will be wrapped into a BufferedInputStream, if not already done.
        skipBytes - initial bytes to skip from input stream.
        byteCount - bytes to copy starting after skipBytes.
        Throws:
        IOException
      • slashify

        public static String slashify​(String path,
                                      boolean startWithSlash,
                                      boolean endWithSlash)
                               throws URISyntaxException
        Parameters:
        path -
        startWithSlash -
        endWithSlash -
        Returns:
        Throws:
        URISyntaxException - if path is empty or has no parent directory available while resolving ../
      • getFileSuffix

        public static String getFileSuffix​(File file)
        Returns the lowercase suffix of the given file name (the text after the last '.' in the file name). Returns null if the file name has no suffix. Only operates on the given file name; performs no I/O operations.
        Parameters:
        file - name of the file
        Returns:
        lowercase suffix of the file name
        Throws:
        NullPointerException - if file is null
      • getFileSuffix

        public static String getFileSuffix​(String filename)
        Returns the lowercase suffix of the given file name (the text after the last '.' in the file name). Returns null if the file name has no suffix. Only operates on the given file name; performs no I/O operations.
        Parameters:
        filename - name of the file
        Returns:
        lowercase suffix of the file name
        Throws:
        NullPointerException - if filename is null
      • getFileOutputStream

        public static FileOutputStream getFileOutputStream​(File file,
                                                           boolean allowOverwrite)
                                                    throws IOException
        Parameters:
        file -
        allowOverwrite -
        Returns:
        outputStream The resulting output stream
        Throws:
        IOException - if the file already exists and allowOverwrite is false, the class FileOutputStream is not accessible or the user does not have sufficient rights to access the local filesystem.
      • getClassFileName

        public static String getClassFileName​(String clazzBinName)
      • getClassURL

        public static URL getClassURL​(String clazzBinName,
                                      ClassLoader cl)
                               throws IOException
        Parameters:
        clazzBinName - com.jogamp.common.util.cache.TempJarCache
        cl - ClassLoader to locate the JarFile
        Returns:
        jar:file:/usr/local/projects/JOGL/gluegen/build-x86_64/gluegen-rt.jar!/com/jogamp/common/util/cache/TempJarCache.class
        Throws:
        IOException - if the jar file could not been found by the ClassLoader
      • getBasename

        public static String getBasename​(String fname)
                                  throws URISyntaxException
        Returns the basename of the given fname w/o directory part
        Throws:
        URISyntaxException - if path is empty or has no parent directory available while resolving ../
      • getDirname

        public static String getDirname​(String fname)
                                 throws URISyntaxException
        Returns unified '/' dirname including the last '/'
        Throws:
        URISyntaxException - if path is empty or has no parent directory available while resolving ../
      • getResource

        public static URLConnection getResource​(String resourcePath,
                                                ClassLoader classLoader,
                                                Class<?> relContext)
        Locating a resource using getResource(String, ClassLoader):
        • relative: relContext's package name-path plus resourcePath via classLoader. This allows locations relative to JAR- and other URLs. The resourcePath may start with ../ to navigate to parent folder. This attempt is skipped if relContext is null.
        • absolute: resourcePath as is via classLoader.

        Returns the resolved and open URLConnection or null if not found.

        Parameters:
        resourcePath - the resource path to locate relative or absolute
        classLoader - the optional ClassLoader, recommended
        relContext - relative context, i.e. position, of the resourcePath, to perform the relative lookup, if not null.
        See Also:
        getResource(String, ClassLoader), ClassLoader.getResource(String), ClassLoader.getSystemResource(String)
      • getRelativeOf

        public static String getRelativeOf​(File baseLocation,
                                           String relativeFile)
                                    throws URISyntaxException
        Generates a path for the 'relativeFile' relative to the 'baseLocation'.
        Parameters:
        baseLocation - denotes a directory
        relativeFile - denotes a relative file to the baseLocation
        Throws:
        URISyntaxException - if path is empty or has no parent directory available while resolving ../
      • getParentOf

        public static String getParentOf​(String path)
                                  throws URISyntaxException
        Parameters:
        path - assuming a slashified path, either denotes a file or directory, either relative or absolute.
        Returns:
        parent of path
        Throws:
        URISyntaxException - if path is empty or has no parent directory available
      • cleanPathString

        public static String cleanPathString​(String path)
                                      throws URISyntaxException
        Parameters:
        path - assuming a slashified path, either denoting a file or directory, either relative or absolute.
        Returns:
        clean path string where ./ and ../ is resolved, while keeping a starting ../ at the beginning of a relative path.
        Throws:
        URISyntaxException - if path is empty or has no parent directory available while resolving ../
      • getUriFilePathOrASCII

        public static String getUriFilePathOrASCII​(Uri uri)
        If uri is a file scheme implementation returns Uri.toFile().File.getPath().

        Otherwise it returns the URI#toASCIIString() encoded URI.

      • openURL

        public static URLConnection openURL​(URL url)
        Returns the connected URLConnection, or null if not url is not available
      • openURL

        public static URLConnection openURL​(URL url,
                                            String dbgmsg)
        Returns the connected URLConnection, or null if not url is not available
      • testFile

        public static boolean testFile​(File file,
                                       boolean shallBeDir,
                                       boolean shallBeWritable)
        Test whether file exists and matches the given requirements
        Parameters:
        file -
        shallBeDir -
        shallBeWritable -
        Returns:
      • testDirExec

        public static boolean testDirExec​(File dir)
                                   throws SecurityException
        Returns true if the given dir
        1. exists, and
        2. is a directory, and
        3. is writeable, and
        4. files can be executed from the directory
        Parameters:
        dir -
        Throws:
        SecurityException - if file creation and process execution is not allowed within the current security context
      • testDir

        public static File testDir​(File dir,
                                   boolean create,
                                   boolean executable)
                            throws SecurityException
        Returns the directory dir, which is processed and tested as described below.
        1. If create is true and the directory does not exist yet, it is created incl. all sub-directories.
        2. If dirName exists, but is not a directory, null is being returned.
        3. If the directory does not exist or is not writeable, null is being returned.
        4. If executable is true and files cannot be executed from the directory, null is being returned.
        Parameters:
        dir - the directory to process
        create - true if the directory shall be created if not existing
        executable - true if the user intents to launch executables from the temporary directory, otherwise false.
        Throws:
        SecurityException - if file creation and process execution is not allowed within the current security context
      • getTempDir

        public static File getTempDir​(boolean executable)
                               throws SecurityException,
                                      IOException
        Returns a platform independent writable directory for temporary files consisting of the platform's temp-root + tmpSubDir, e.g. /tmp/jogamp_0000/.

        On standard Java the temp-root folder is specified by java.io.tempdir.

        On Android the temp-root folder is relative to the applications local folder (see Context#getDir(String, int)) is returned, if the Android application/activity has registered it's Application Context via StaticContext.init(..). This allows using the temp folder w/o the need for sdcard access, which would be the java.io.tempdir location on Android!

        In case temp-root is the users home folder, a dot is being prepended to tmpSubDir, i.e.: /home/user/.jogamp_0000/.

        Parameters:
        executable - true if the user intents to launch executables from the temporary directory, otherwise false.
        Throws:
        IOException - if no temporary directory could be determined
        SecurityException - if access to java.io.tmpdir is not allowed within the current security context
        See Also:
        PropertyAccess.getProperty(String, boolean), Context#getDir(String, int)
      • filesOf

        public static ArrayList<String> filesOf​(List<String> paths,
                                                List<Pattern> excludes,
                                                List<Pattern> includes)
        Retrieve the list of all filenames traversing through given paths
        Parameters:
        paths - list of paths to traverse through, containing directories and files
        excludes - optional list of exclude Pattern. All matching files or directories will be omitted. Maybe be null or empty.
        includes - optional list of explicit include Pattern. If given, only matching files will be returned, otherwise all occurring.
        Returns:
        list of unsorted filenames within given paths