public class IOUtil extends Object
Modifier and Type | Class and Description |
---|---|
static class |
IOUtil.ClassResources
Helper compound associating a class instance and resource paths
to be
resolved at a later time. |
Modifier and Type | Field and Description |
---|---|
static boolean |
DEBUG |
static String |
FILE_SCHEME
"file"
|
static String |
HTTP_SCHEME
"http"
|
static String |
HTTPS_SCHEME
"https"
|
static String |
JAR_SCHEME
"jar"
|
static char |
JAR_SCHEME_SEPARATOR
A JAR subprotocol is separeted from the JAR entry w/ this separator 33.
|
static String |
SCHEME_SEPARATOR
":"
|
static String |
tmpSubDir
Subdirectory within platform's temporary root directory where all JogAmp related temp files are being stored:
jogamp |
Modifier and Type | Method and Description |
---|---|
static String |
cleanPathString(String path) |
static void |
close(Closeable stream,
boolean throwRuntimeException) |
static URI |
compose(String scheme,
String schemeSpecificPart,
String relativePath,
String fragment)
Generates a URI for the relativePath relative to the schemeSpecificPart,
hence the result is a absolute location.
|
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 ByteBuffer |
copyStream2ByteBuffer(InputStream stream,
int initialCapacity)
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 |
copyStream2Stream(int bufferSize,
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)
Utilizing
File.createTempFile(String, String, File) using
getTempDir(boolean) as the directory parameter, ie. |
static String |
decodeFromURI(String s)
Reverses escaping of characters as performed via
encodeToURI(String) . |
static String |
decodeURIIfFilePath(URI uri)
If
uri is a file scheme,
implementation returns the decoded [ "//"+URI.getAuthority() ] + URI.getPath() via decodeURIToFilePath(String) . |
static String |
decodeURIToFilePath(String uriPath)
Decodes uri-file path characters complying w/ RFC 2396 to native file-path.
|
static String |
encodeFilePathToURI(String filePath)
Encodes file path characters not complying w/ RFC 2396 and the
URI.URI(String) ctor. |
static String |
encodeToURI(String s)
Escapes characters not complying w/ RFC 2396 and the
URI.URI(String) ctor. |
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 URI |
getRelativeOf(URI baseURI,
String relativePath)
Generates a URI for the relativePath relative to the baseURI,
hence the result is a absolute location.
|
static URL |
getRelativeOf(URL baseURL,
String relativePath)
Wraps
getRelativeOf(URI, String) for convenience. |
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)
Returns a platform independent writable directory for temporary files
consisting of the platform's
temp-root + tmpSubDir ,
e.g. |
static String |
getURIDirname(String uriS)
The URI's
protocol:/some/path/gluegen-rt.jar
parent dirname URI protocol:/some/path/ will be returned. |
static URI |
getURIDirname(URI uri)
The URI's
protocol:/some/path/gluegen-rt.jar
parent dirname URI protocol:/some/path/ will be returned. |
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)
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 URI |
toURISimple(File file)
Using the simple conversion via File -> URI, assuming proper characters.
|
static URI |
toURISimple(String protocol,
String path,
boolean isDirectory)
Using the simple conversion via File -> URI, assuming proper characters.
|
static URL |
toURL(URI uri)
|
public static final boolean DEBUG
public static final String SCHEME_SEPARATOR
public static final String FILE_SCHEME
public static final String HTTP_SCHEME
public static final String HTTPS_SCHEME
public static final String JAR_SCHEME
public static final char JAR_SCHEME_SEPARATOR
public static final String tmpSubDir
jogamp
public static int copyURLConn2File(URLConnection conn, File outFile) throws IOException
conn
- the open URLConnectionoutFile
- the destinationIOException
public static int copyStream2File(InputStream in, File outFile, int totalNumBytes) throws IOException
in
- the sourceoutFile
- the destinationtotalNumBytes
- informal number of expected bytes, maybe used for user feedback while processing. -1 if unknownIOException
public static int copyStream2Stream(InputStream in, OutputStream out, int totalNumBytes) throws IOException
in
- the sourceout
- the destinationtotalNumBytes
- informal number of expected bytes, maybe used for user feedback while processing. -1 if unknownIOException
public static int copyStream2Stream(int bufferSize, InputStream in, OutputStream out, int totalNumBytes) throws IOException
bufferSize
- the intermediate buffer size, should be MachineDescription.pageSizeInBytes()
for best performance.in
- the sourceout
- the destinationtotalNumBytes
- informal number of expected bytes, maybe used for user feedback while processing. -1 if unknownIOException
public static byte[] copyStream2ByteArray(InputStream stream) throws IOException
IOException
public static ByteBuffer copyStream2ByteBuffer(InputStream stream) throws IOException
The implementation creates the ByteBuffer w/ copyStream2ByteArray(InputStream)
's returned byte array.
stream
- input stream, which will be wrapped into a BufferedInputStream, if not already done.IOException
public static ByteBuffer copyStream2ByteBuffer(InputStream stream, int initialCapacity) throws IOException
The implementation creates the ByteBuffer w/ copyStream2ByteArray(InputStream)
's returned byte array.
stream
- input stream, which will be wrapped into a BufferedInputStream, if not already done.initialCapacity
- initial buffer capacity in bytes, if > available bytesIOException
public static String slashify(String path, boolean startWithSlash, boolean endWithSlash) throws URISyntaxException
path
- startWithSlash
- endWithSlash
- URISyntaxException
- if path is empty or has no parent directory available while resolving ../
public static URI toURISimple(File file) throws URISyntaxException
URISyntaxException
- if path is empty or has no parent directory available while resolving ../
URISyntaxException
- if the resulting string does not comply w/ an RFC 2396 URIpublic static URI toURISimple(String protocol, String path, boolean isDirectory) throws URISyntaxException
URISyntaxException
- if path is empty or has no parent directory available while resolving ../
URISyntaxException
- if the resulting string does not comply w/ an RFC 2396 URIpublic static String getFileSuffix(File file)
file
- name of the fileNullPointerException
- if file is nullpublic static String getFileSuffix(String filename)
filename
- name of the fileNullPointerException
- if filename is nullpublic static FileOutputStream getFileOutputStream(File file, boolean allowOverwrite) throws IOException
file
- allowOverwrite
- 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.public static URL getClassURL(String clazzBinName, ClassLoader cl) throws IOException
clazzBinName
- com.jogamp.common.util.cache.TempJarCachecl
- ClassLoader to locate the JarFileIOException
- if the jar file could not been found by the ClassLoaderpublic static String getBasename(String fname) throws URISyntaxException
URISyntaxException
- if path is empty or has no parent directory available while resolving ../
public static String getDirname(String fname) throws URISyntaxException
URISyntaxException
- if path is empty or has no parent directory available while resolving ../
public static URI getURIDirname(URI uri) throws IllegalArgumentException, URISyntaxException
protocol:/some/path/gluegen-rt.jar
parent dirname URI protocol:/some/path/
will be returned.
protocol may be "file", "http", etc..
uri
- "protocol:/some/path/gluegen-rt.jar"IllegalArgumentException
- if the URI doesn't match the expected formatting, or is nullURISyntaxException
public static String getURIDirname(String uriS) throws IllegalArgumentException, URISyntaxException
protocol:/some/path/gluegen-rt.jar
parent dirname URI protocol:/some/path/
will be returned.
protocol may be "file", "http", etc..
uri
- "protocol:/some/path/gluegen-rt.jar" (URI encoded)IllegalArgumentException
- if the URI doesn't match the expected formatting, or is nullURISyntaxException
public static URL toURL(URI uri) throws IOException, IllegalArgumentException, URISyntaxException
URI
to an URL
while using a non encoded path.
A file scheme path, i.e. path following file:
, is converted as follows:
File file = new File( decodeFromURI
( specificURI.getPath() ) );
String uriFilePath = encodeFilePathToURI
( file.getPath() );
above conversion results in a decoded file path appropriate to be used by subsequent file i/o operations (JarFile, zip, ..).
Otherwise the default URL
translation URI.toURL()
is being used.
The following cases are considered:
new File(uri).getPath()
.
Note that a given authority
for file schemes is preserved to support window's shares.
Tested w/ unit test com.jogamp.common.util.TestIOUtilURIHandling
uri
- IOException
IllegalArgumentException
URISyntaxException
public static URLConnection getResource(Class<?> context, String resourcePath)
getResource(String, ClassLoader)
:
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.context
's ClassLoader and the resourcePath
as is (filesystem)Returns the resolved and open URLConnection or null if not found.
public static URLConnection getResource(String resourcePath, ClassLoader cl)
Returns the resolved and connected URLConnection or null if not found.
public static String getRelativeOf(File baseLocation, String relativeFile) throws URISyntaxException
baseLocation
- denotes a directoryrelativeFile
- denotes a relative file to the baseLocationURISyntaxException
- if path is empty or has no parent directory available while resolving ../
public static String getParentOf(String path) throws URISyntaxException
path
- assuming a slashified path beginning with "/" as it's root directory, either denotes a file or directory.URISyntaxException
- if path is empty or has no parent directory availablepublic static String cleanPathString(String path) throws URISyntaxException
path
- assuming a slashified path beginning with "/" as it's root directory, either denotes a file or directory.../
and ./
is resolved.URISyntaxException
- if path is empty or has no parent directory available while resolving ../
public static URI getRelativeOf(URI baseURI, String relativePath) throws URISyntaxException
Impl. operates on the scheme-specific-part, and hence is sub-protocol savvy.
In case baseURI is not a path ending w/ '/', it's a assumed to be a file and it's parent is being used.
baseURI
- denotes a URI to a directory ending w/ '/', or a file. In the latter case the file's directory is being used.relativePath
- denotes a relative file to the baseLocation's parent directoryURISyntaxException
- if path is empty or has no parent directory available while resolving ../
public static URL getRelativeOf(URL baseURL, String relativePath) throws IOException
getRelativeOf(URI, String)
for convenience.IOException
public static URI compose(String scheme, String schemeSpecificPart, String relativePath, String fragment) throws URISyntaxException
schemeSpecificPart's query, if exist is split to path and query.
In case path is not a path ending w/ '/', it's a assumed to be a file and it's parent is being used.
scheme
- scheme of the resulting URIschemeSpecificPart
- may include a query, which is separated while processing (URI encoded)relativePath
- denotes a relative file to the baseLocation's parent directory (URI encoded)fragment
- the URI fragment (URI encoded)URISyntaxException
- if path is empty or has no parent directory available while resolving ../
encodeToURI(String)
public static String encodeToURI(String s)
URI.URI(String)
ctor.
public static String decodeFromURI(String s)
encodeToURI(String)
.
public static String encodeFilePathToURI(String filePath)
URI.URI(String)
ctor.
Implementation processes the filePath
if File.separatorChar
!= '/'
as follows:
Note that this method does not perform space encoding,
which can be utilized via encodeToURI(String)
.
Even though Oracle's JarURLStreamHandler can handle backslashes and
erroneous URIs w/ e.g. Windows file 'syntax', other may not (Netbeans).
See Bug 857 - http://jogamp.org/bugzilla/show_bug.cgi?id=857
encodeToURI(String)
public static String decodeURIToFilePath(String uriPath)
Implementation decodes the space-encoding path=
.
decodeFromURI
(uriPath)
Then it processes the path
if File.separatorChar
!= '/'
as follows:
decodeFromURI(String)
public static String decodeURIIfFilePath(URI uri)
uri
is a file scheme,
implementation returns the decoded [ "//"+URI.getAuthority()
] + URI.getPath()
via decodeURIToFilePath(String)
.
Otherwise it returns the URI.toASCIIString()
encoded URI.
public static URLConnection openURL(URL url)
public static URLConnection openURL(URL url, String dbgmsg)
public static boolean testFile(File file, boolean shallBeDir, boolean shallBeWritable)
file
exists and matches the given requirementsfile
- shallBeDir
- shallBeWritable
- public static boolean testDirExec(File dir) throws SecurityException
dir
dir
- SecurityException
- if file creation and process execution is not allowed within the current security contextpublic static File testDir(File dir, boolean create, boolean executable) throws SecurityException
dir
, which is processed and tested as described below.
create
is true
and the directory does not exist yet, it is created incl. all sub-directories.dirName
exists, but is not a directory, null
is being returned.null
is being returned.executable
is true
and files cannot be executed from the directory, null
is being returned.dir
- the directory to processcreate
- true if the directory shall be created if not existingexecutable
- true if the user intents to launch executables from the temporary directory, otherwise false.SecurityException
- if file creation and process execution is not allowed within the current security contextpublic static File getTempDir(boolean executable) throws SecurityException, RuntimeException
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/
.
executable
- true if the user intents to launch executables from the temporary directory, otherwise false.RuntimeException
- if no temporary directory could be determinedSecurityException
- if access to java.io.tmpdir
is not allowed within the current security contextPropertyAccess.getProperty(String, boolean)
,
Context#getDir(String, int)
public static File createTempFile(String prefix, String suffix, boolean executable) throws IllegalArgumentException, IOException, SecurityException
File.createTempFile(String, String, File)
using
getTempDir(boolean)
as the directory parameter, ie. location
of the root temp folder.prefix
- suffix
- executable
- true if the temporary root folder needs to hold executable files, otherwise false.IllegalArgumentException
IOException
SecurityException
File.createTempFile(String, String)
,
File.createTempFile(String, String, File)
,
getTempDir(boolean)
public static void close(Closeable stream, boolean throwRuntimeException) throws RuntimeException
RuntimeException