Class IOUtil

java.lang.Object
com.jogamp.common.util.IOUtil

public class IOUtil extends Object
  • Field Details

    • 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:
    • patternSpaceEnc

      public static final Pattern patternSpaceEnc
  • Method Details

    • copyURLConn2File

      public static int copyURLConn2File(URLConnection conn, File outFile) throws IOException
      Copy the 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, int totalNumBytes) throws IOException
      Copy the specified input stream to the specified output file. The total number of bytes written is returned.
      Parameters:
      in - the source
      outFile - the destination
      totalNumBytes - informal number of expected bytes, maybe used for user feedback while processing. -1 if unknown
      Returns:
      Throws:
      IOException
    • copyStream2Stream

      public static int copyStream2Stream(InputStream in, OutputStream out, int totalNumBytes) throws IOException
      Copy the specified input stream to the specified output stream. The total number of bytes written is returned.
      Parameters:
      in - the source
      out - the destination
      totalNumBytes - informal number of expected bytes, maybe used for user feedback while processing. -1 if unknown
      Returns:
      Throws:
      IOException
    • copyStream2Stream

      public static int copyStream2Stream(int bufferSize, InputStream in, OutputStream out, int totalNumBytes) throws IOException
      Copy the 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
      totalNumBytes - informal number of expected bytes, maybe used for user feedback while processing. -1 if unknown
      Returns:
      Throws:
      IOException
    • appendCharStream

      public static StringBuilder appendCharStream(StringBuilder sb, Reader r) throws IOException
      Throws:
      IOException
    • copyStream2ByteArray

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

      public static ByteBuffer copyStream2ByteBuffer(InputStream stream) throws IOException
      Copy the specified input stream to a NIO ByteBuffer w/ native byte order, which is being returned.

      The implementation creates the ByteBuffer w/ copyStream2ByteArray(InputStream)'s returned byte array.

      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 specified input stream to a NIO ByteBuffer w/ native byte order, which is being returned.

      The implementation creates the ByteBuffer w/ copyStream2ByteArray(InputStream)'s returned byte array.

      Parameters:
      stream - input stream, which will be wrapped into a BufferedInputStream, if not already done.
      initialCapacity - initial buffer capacity in bytes, if > available bytes
      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(Class<?> context, String resourcePath)
      Deprecated.
      Locating a resource using getResource(String, ClassLoader):
      • relative: context's package name-path plus resourcePath via context's 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 context is null.
      • absolute: resourcePath as is via context's ClassLoader. In case context is null, this class ClassLoader is being used.

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

      See Also:
    • 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

      public static URLConnection getResource(String resourcePath, ClassLoader cl)
      Locating a resource using the ClassLoader's facilities.

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

      See Also:
    • 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:
    • createTempFile

      public static File createTempFile(String prefix, String suffix, boolean executable) throws IllegalArgumentException, IOException, SecurityException
      Utilizing File.createTempFile(String, String, File) using getTempDir(boolean) as the directory parameter, ie. location of the root temp folder.
      Parameters:
      prefix -
      suffix -
      executable - true if the temporary root folder needs to hold executable files, otherwise false.
      Returns:
      Throws:
      IllegalArgumentException
      IOException - if no temporary directory could be determined or temp file could not be created
      SecurityException
      See Also:
    • close

      public static void close(Closeable stream, boolean throwRuntimeException) throws RuntimeException
      Throws:
      RuntimeException
    • close

      public static IOException close(Closeable stream, IOException[] saveOneIfFree, PrintStream dumpExcess)
      Helper to simplify closing Closeables.
      Parameters:
      stream - the Closeable instance to close
      saveOneIfFree - cache for one IOException to store, if not already used (excess)
      dumpExcess - dump the excess IOException on this PrintStream
      Returns:
      the excess IOException or null.