com.jogamp.common.util
Class IOUtil

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

public class IOUtil
extends Object


Field Summary
static boolean DEBUG
           
static String java_io_tmpdir_propkey
          Std.
static String tmpSubDir
          Subdirectory within platform's temporary root directory where all JogAmp related temp files are being stored: jogamp
static String user_home_propkey
           
 
Method Summary
static String cleanPathString(String path)
           
static void close(Closeable stream, boolean throwRuntimeException)
           
static URL compose(String scheme, String auth, String path1, String path2, String query, String fragment)
           
static byte[] copyStream2ByteArray(InputStream stream)
          Copy the specified input stream to a byte array, which is being returned.
static ByteBuffer copyStream2ByteBuffer(InputStream stream)
          Copy the specified input stream to a NIO ByteBuffer w/ native byte order, which is being returned.
static int copyStream2File(InputStream in, File outFile, int totalNumBytes)
          Copy the specified input stream to the specified output file.
static int copyStream2Stream(InputStream in, OutputStream out, int totalNumBytes)
          Copy the specified input stream to the specified output stream.
static int copyURLConn2File(URLConnection conn, File outFile)
          Copy the specified URL resource to the specified output file.
static File createTempFile(String prefix, String suffix, boolean executable, AccessControlContext acc)
          Utilizing File.createTempFile(String, String, File) using #getTempRoot(AccessControlContext, boolean) as the directory parameter, ie.
static String getBasename(String fname)
          Returns the basename of the given fname w/o directory part
static String getClassFileName(String clazzBinName)
           
static URL getClassURL(String clazzBinName, ClassLoader cl)
           
static String getDirname(String fname)
          Returns unified '/' dirname including the last '/'
static FileOutputStream getFileOutputStream(File file, boolean allowOverwrite)
           
static String getFileSuffix(File file)
          Returns the lowercase suffix of the given file name (the text after the last '.' in the file name).
static String getFileSuffix(String filename)
          Returns the lowercase suffix of the given file name (the text after the last '.' in the file name).
static String getParentOf(String path)
           
static String getRelativeOf(File baseLocation, String relativeFile)
          Generates a path for the 'relativeFile' relative to the 'baseLocation'.
static URL getRelativeOf(URL baseLocation, String relativeFile)
          Generates a path for the 'relativeFile' relative to the 'baseLocation', hence the result is a absolute location.
static URLConnection getResource(Class<?> context, String resourcePath)
          Locating a resource using getResource(String, ClassLoader): relative: context's package name-path plus resourcePath via context's ClassLoader.
static URLConnection getResource(String resourcePath, ClassLoader cl)
          Locating a resource using the ClassLoader's facilities.
static File getTempDir(boolean executable, AccessControlContext acc)
          Returns a platform independent writable directory for temporary files consisting of the platform's temp-root + tmpSubDir, e.g.
static URLConnection openURL(URL url)
          Returns the connected URLConnection, or null if not url is not available
static URLConnection openURL(URL url, String dbgmsg)
          Returns the connected URLConnection, or null if not url is not available
static String slashify(String path, boolean startWithSlash, boolean endWithSlash)
           
static File testDir(File dir, boolean create, boolean executable, AccessControlContext acc)
          Returns the directory dir, which is processed and tested as described below.
static boolean testDirExec(File dir)
          Returns true if the given dir exists, and is a directory, and is writeable, and files can be executed from the directory
static boolean testFile(File file, boolean shallBeDir, boolean shallBeWritable)
          Test whether file exists and matches the given requirements
static URL toURL(File file)
          Using the proper advertised conversion via File -> URI -> URL
static URL toURLSimple(File file)
          Using the simple conversion via File -> URL, assuming proper characters.
static URL toURLSimple(String protocol, String file, boolean isDirectory)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEBUG

public static final boolean DEBUG

java_io_tmpdir_propkey

public static final String java_io_tmpdir_propkey
Std. temporary directory property key java.io.tmpdir

See Also:
Constant Field Values

user_home_propkey

public static final String user_home_propkey
See Also:
Constant Field Values

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
Method Detail

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. Both streams are closed upon completion.

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. Both streams are closed upon completion.

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

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.

Throws:
IOException

slashify

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

toURL

public static URL toURL(File file)
                 throws MalformedURLException
Using the proper advertised conversion via File -> URI -> URL

Throws:
MalformedURLException

toURLSimple

public static URL toURLSimple(File file)
                       throws MalformedURLException
Using the simple conversion via File -> URL, assuming proper characters.

Throws:
MalformedURLException

toURLSimple

public static URL toURLSimple(String protocol,
                              String file,
                              boolean isDirectory)
                       throws MalformedURLException
Throws:
MalformedURLException

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)
Returns the basename of the given fname w/o directory part


getDirname

public static String getDirname(String fname)
Returns unified '/' dirname including the last '/'


getResource

public static URLConnection getResource(Class<?> context,
                                        String resourcePath)
Locating a resource using getResource(String, ClassLoader):

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

See Also:
getResource(String, ClassLoader), ClassLoader.getResource(String), ClassLoader.getSystemResource(String)

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:
ClassLoader.getResource(String), ClassLoader.getSystemResource(String), URL.URL(String), File.File(String)

getRelativeOf

public static String getRelativeOf(File baseLocation,
                                   String relativeFile)
Generates a path for the 'relativeFile' relative to the 'baseLocation'.

Parameters:
baseLocation - denotes a directory
relativeFile - denotes a relative file to the baseLocation

getParentOf

public static String getParentOf(String path)
                          throws MalformedURLException
Parameters:
path - assuming a slashified path beginning with "/" as it's root directory, either denotes a file or directory.
Returns:
parent of path
Throws:
MalformedURLException - if path is empty or has parent no directory available

cleanPathString

public static String cleanPathString(String path)
                              throws MalformedURLException
Parameters:
path - assuming a slashified path beginning with "/" as it's root directory, either denotes a file or directory.
Returns:
clean path string where ../ and ./ is resolved.
Throws:
MalformedURLException - if path is empty or has no parent directory available while resolving ../

getRelativeOf

public static URL getRelativeOf(URL baseLocation,
                                String relativeFile)
                         throws MalformedURLException
Generates a path for the 'relativeFile' relative to the 'baseLocation', hence the result is a absolute location.

Parameters:
baseLocation - denotes a URL to a directory if ending w/ '/', otherwise we assume a file
relativeFile - denotes a relative file to the baseLocation's parent directory
Throws:
MalformedURLException

compose

public static URL compose(String scheme,
                          String auth,
                          String path1,
                          String path2,
                          String query,
                          String fragment)
                   throws MalformedURLException
Throws:
MalformedURLException

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,
                           AccessControlContext acc)
                    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.
acc - The security AccessControlContext to create directories and test executability
Throws:
SecurityException - if file creation and process execution is not allowed within the current security context

getTempDir

public static File getTempDir(boolean executable,
                              AccessControlContext acc)
                       throws SecurityException,
                              RuntimeException
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.
acc - The security AccessControlContext to access properties, environment vars, create directories and test executability
Throws:
SecurityException - if access to java.io.tmpdir is not allowed within the current security context
RuntimeException - if no temporary directory could be determined
See Also:
PropertyAccess.getProperty(String, boolean, java.security.AccessControlContext), Context#getDir(String, int)

createTempFile

public static File createTempFile(String prefix,
                                  String suffix,
                                  boolean executable,
                                  AccessControlContext acc)
                           throws IllegalArgumentException,
                                  IOException,
                                  SecurityException
Utilizing File.createTempFile(String, String, File) using #getTempRoot(AccessControlContext, 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
SecurityException
See Also:
File.createTempFile(String, String), File.createTempFile(String, String, File), #getTempRoot(AccessControlContext, boolean)

close

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