Package org.jboss.vfs
Class VFSUtils
- java.lang.Object
-
- org.jboss.vfs.VFSUtils
-
public class VFSUtils extends java.lang.Object
VFS Utilities- Version:
- $Revision: 1.1 $
- Author:
- Adrian Brock, Ales Justin, David M. Lloyd
-
-
Field Summary
Fields Modifier and Type Field Description static int
DEFAULT_BUFFER_SIZE
The default buffer size to use for copiesstatic java.net.URLStreamHandler
FILE_URL_HANDLER
TheURLStreamHandler
for the 'file' protocolstatic java.lang.String
FORCE_CASE_SENSITIVE_KEY
Constant representing the system property for forcing case sensitivestatic java.lang.String
VFS_PROTOCOL
Constant representing the URL vfs protocolstatic java.net.URLStreamHandler
VFS_URL_HANDLER
TheURLStreamHandler
for the 'vfs' protocol
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static void
addManifestLocations(VirtualFile file, java.util.List<VirtualFile> paths)
Add manifest pathsstatic java.lang.String
canonicalize(java.lang.String path)
Canonicalize the given path.static void
copyChildrenRecursive(VirtualFile original, VirtualFile target)
Copy all the children from the originalVirtualFile
the target recursively.static void
copyStream(java.io.InputStream is, java.io.OutputStream os)
Copy input stream to output stream without closing streams.static void
copyStream(java.io.InputStream is, java.io.OutputStream os, int bufferSize)
Copy input stream to output stream without closing streams.static void
copyStreamAndClose(java.io.InputStream is, java.io.OutputStream os)
Copy input stream to output stream and close them bothstatic void
copyStreamAndClose(java.io.InputStream is, java.io.OutputStream os, int bufferSize)
Copy input stream to output stream and close them bothstatic java.io.InputStream
createJarFileInputStream(VirtualFile virtualFile)
Get an input stream that will always be consumable as a Zip/Jar file.static java.lang.String
decode(java.lang.String path)
Decode the path with UTF-8 encoding..static java.lang.String
decode(java.lang.String path, java.lang.String encoding)
Decode the path.static java.io.InputStream
emptyStream()
Get the empty input stream.static boolean
exists(java.io.File file)
In case the file system is not case sensitive we compare the canonical path with the absolute path of the file after normalized.static java.lang.String
fixName(java.lang.String name)
Fix a name (removes any trailing slash)static java.util.regex.Pattern
getGlobPattern(java.lang.String glob)
Get a regular expression pattern which matches any path names which match the given glob.static java.util.jar.Manifest
getManifest(VirtualFile archive)
Get a manifest from a virtual file, assuming the virtual file is the root of an archivestatic java.io.File
getMountSource(java.io.Closeable handle)
Return the mount source File for a given mount handle.static java.lang.String
getName(java.net.URI uri)
Get the name.static java.lang.String
getPathsString(java.util.Collection<VirtualFile> paths)
Get the paths string for a collection of virtual filesstatic java.net.URI
getPhysicalURI(VirtualFile file)
Get a physical URI for a virtual file.static java.net.URL
getPhysicalURL(VirtualFile file)
Get a physical URL for a virtual file.static java.net.URI
getRootURI(VirtualFile file)
Get the physical root URL of the filesystem of a virtual file.static java.net.URL
getRootURL(VirtualFile file)
Get the physical root URL of the filesystem of a virtual file.static java.net.URI
getVirtualURI(VirtualFile file)
Get the virtual URI for a virtual file.static java.net.URL
getVirtualURL(VirtualFile file)
Get the virtual URL for a virtual file.static boolean
isForceCaseSensitive()
static java.util.jar.Manifest
readManifest(VirtualFile manifest)
Read the manifest from given manifest VirtualFile.static void
recursiveCopy(java.io.File original, java.io.File destDir)
Recursively copy a file or directory from one location to another.static void
recursiveCopy(java.io.File original, VirtualFile destDir)
Recursively copy a file or directory from one location to another.static void
recursiveCopy(VirtualFile original, java.io.File destDir)
Recursively copy a file or directory from one location to another.static void
recursiveCopy(VirtualFile original, VirtualFile destDir)
Recursively copy a file or directory from one location to another.static boolean
recursiveDelete(java.io.File root)
Attempt to recursively delete a real file.static boolean
recursiveDelete(VirtualFile root)
Attempt to recursively delete a virtual file.static void
safeClose(java.io.Closeable c)
Safely close some resource without throwing an exception.static void
safeClose(java.io.Closeable... closeables)
Safely close some resource without throwing an exception.static void
safeClose(java.lang.Iterable<? extends java.io.Closeable> ci)
Safely close some resources without throwing an exception.static void
safeClose(java.util.zip.ZipFile zipFile)
Safely close some resource without throwing an exception.static java.net.URL
sanitizeURL(java.net.URL url)
Ensure the url is convertible to URI by encoding spaces and percent characters if necessarystatic java.net.URI
toURI(java.net.URL url)
Deal with urls that may include spaces.static void
unzip(java.io.File zipFile, java.io.File destDir)
Expand a zip file to a destination directory.static void
writeFile(VirtualFile virtualFile, byte[] bytes)
Write the given bytes to the given virtual file, replacing its current contents (if any) or creating a new file if one does not exist.static void
writeFile(VirtualFile virtualFile, java.io.InputStream is)
Write the content from the givenInputStream
to the given virtual file, replacing its current contents (if any) or creating a new file if one does not exist.
-
-
-
Field Detail
-
VFS_PROTOCOL
public static final java.lang.String VFS_PROTOCOL
Constant representing the URL vfs protocol- See Also:
- Constant Field Values
-
FORCE_CASE_SENSITIVE_KEY
public static final java.lang.String FORCE_CASE_SENSITIVE_KEY
Constant representing the system property for forcing case sensitive- See Also:
- Constant Field Values
-
VFS_URL_HANDLER
public static final java.net.URLStreamHandler VFS_URL_HANDLER
TheURLStreamHandler
for the 'vfs' protocol
-
FILE_URL_HANDLER
public static final java.net.URLStreamHandler FILE_URL_HANDLER
TheURLStreamHandler
for the 'file' protocol
-
DEFAULT_BUFFER_SIZE
public static final int DEFAULT_BUFFER_SIZE
The default buffer size to use for copies- See Also:
- Constant Field Values
-
-
Method Detail
-
getPathsString
public static java.lang.String getPathsString(java.util.Collection<VirtualFile> paths)
Get the paths string for a collection of virtual files- Parameters:
paths
- the paths- Returns:
- the string
- Throws:
java.lang.IllegalArgumentException
- for null paths
-
addManifestLocations
public static void addManifestLocations(VirtualFile file, java.util.List<VirtualFile> paths) throws java.io.IOException
Add manifest paths- Parameters:
file
- the filepaths
- the paths to add to- Throws:
java.io.IOException
- if there is an error reading the manifest or the virtual file is closedjava.lang.IllegalStateException
- if the file has no parentjava.lang.IllegalArgumentException
- for a null file or paths
-
getManifest
public static java.util.jar.Manifest getManifest(VirtualFile archive) throws java.io.IOException
Get a manifest from a virtual file, assuming the virtual file is the root of an archive- Parameters:
archive
- the root the archive- Returns:
- the manifest or null if not found
- Throws:
java.io.IOException
- if there is an error reading the manifest or the virtual file is closedjava.lang.IllegalArgumentException
- for a null archive
-
readManifest
public static java.util.jar.Manifest readManifest(VirtualFile manifest) throws java.io.IOException
Read the manifest from given manifest VirtualFile.- Parameters:
manifest
- the VF to read from- Returns:
- JAR's manifest
- Throws:
java.io.IOException
- if problems while opening VF stream occur
-
fixName
public static java.lang.String fixName(java.lang.String name)
Fix a name (removes any trailing slash)- Parameters:
name
- the name to fix- Returns:
- the fixed name
- Throws:
java.lang.IllegalArgumentException
- for a null name
-
decode
public static java.lang.String decode(java.lang.String path)
Decode the path with UTF-8 encoding..- Parameters:
path
- the path to decode- Returns:
- decoded path
-
decode
public static java.lang.String decode(java.lang.String path, java.lang.String encoding)
Decode the path.- Parameters:
path
- the path to decodeencoding
- the encoding- Returns:
- decoded path
-
getName
public static java.lang.String getName(java.net.URI uri)
Get the name.- Parameters:
uri
- the uri- Returns:
- name from uri's path
-
toURI
public static java.net.URI toURI(java.net.URL url) throws java.net.URISyntaxException
Deal with urls that may include spaces.- Parameters:
url
- the url- Returns:
- uri the uri
- Throws:
java.net.URISyntaxException
- for any error
-
sanitizeURL
public static java.net.URL sanitizeURL(java.net.URL url) throws java.net.URISyntaxException, java.net.MalformedURLException
Ensure the url is convertible to URI by encoding spaces and percent characters if necessary- Parameters:
url
- to be sanitized- Returns:
- sanitized URL
- Throws:
java.net.URISyntaxException
- if URI conversion can't be fixedjava.net.MalformedURLException
- if an error occurs
-
copyChildrenRecursive
public static void copyChildrenRecursive(VirtualFile original, VirtualFile target) throws java.io.IOException
Copy all the children from the originalVirtualFile
the target recursively.- Parameters:
original
- the file to copy children fromtarget
- the file to copy the children to- Throws:
java.io.IOException
- if any problems occur copying the files
-
copyStreamAndClose
public static void copyStreamAndClose(java.io.InputStream is, java.io.OutputStream os) throws java.io.IOException
Copy input stream to output stream and close them both- Parameters:
is
- input streamos
- output stream- Throws:
java.io.IOException
- for any error
-
copyStreamAndClose
public static void copyStreamAndClose(java.io.InputStream is, java.io.OutputStream os, int bufferSize) throws java.io.IOException
Copy input stream to output stream and close them both- Parameters:
is
- input streamos
- output streambufferSize
- the buffer size to use- Throws:
java.io.IOException
- for any error
-
copyStream
public static void copyStream(java.io.InputStream is, java.io.OutputStream os) throws java.io.IOException
Copy input stream to output stream without closing streams. Flushes output stream when done.- Parameters:
is
- input streamos
- output stream- Throws:
java.io.IOException
- for any error
-
copyStream
public static void copyStream(java.io.InputStream is, java.io.OutputStream os, int bufferSize) throws java.io.IOException
Copy input stream to output stream without closing streams. Flushes output stream when done.- Parameters:
is
- input streamos
- output streambufferSize
- the buffer size to use- Throws:
java.io.IOException
- for any error
-
writeFile
public static void writeFile(VirtualFile virtualFile, byte[] bytes) throws java.io.IOException
Write the given bytes to the given virtual file, replacing its current contents (if any) or creating a new file if one does not exist.- Parameters:
virtualFile
- the virtual file to writebytes
- the bytes- Throws:
java.io.IOException
- if an error occurs
-
writeFile
public static void writeFile(VirtualFile virtualFile, java.io.InputStream is) throws java.io.IOException
Write the content from the givenInputStream
to the given virtual file, replacing its current contents (if any) or creating a new file if one does not exist.- Parameters:
virtualFile
- the virtual file to writeis
- the input stream- Throws:
java.io.IOException
- if an error occurs
-
getVirtualURL
public static java.net.URL getVirtualURL(VirtualFile file) throws java.net.MalformedURLException
Get the virtual URL for a virtual file. This URL can be used to access the virtual file; however, taking the file part of the URL and attempting to use it with theFile
class may fail if the file is not present on the physical filesystem, and in general should not be attempted. Note: if the given VirtualFile refers to a directory at the time of this method invocation, a trailing slash will be appended to the URL; this means that invoking this method may require a filesystem access, and in addition, may not produce consistent results over time.- Parameters:
file
- the virtual file- Returns:
- the URL
- Throws:
java.net.MalformedURLException
- if the file cannot be coerced into a URL for some reason- See Also:
VirtualFile.asDirectoryURL()
,VirtualFile.asFileURL()
-
getVirtualURI
public static java.net.URI getVirtualURI(VirtualFile file) throws java.net.URISyntaxException
Get the virtual URI for a virtual file. Note: if the given VirtualFile refers to a directory at the time of this method invocation, a trailing slash will be appended to the URI; this means that invoking this method may require a filesystem access, and in addition, may not produce consistent results over time.- Parameters:
file
- the virtual file- Returns:
- the URI
- Throws:
java.net.URISyntaxException
- if the file cannot be coerced into a URI for some reason- See Also:
VirtualFile.asDirectoryURI()
,VirtualFile.asFileURI()
-
getPhysicalURL
public static java.net.URL getPhysicalURL(VirtualFile file) throws java.io.IOException
Get a physical URL for a virtual file. See the warnings on theVirtualFile.getPhysicalFile()
method before using this method.- Parameters:
file
- the virtual file- Returns:
- the physical file URL
- Throws:
java.io.IOException
- if an I/O error occurs getting the physical file
-
getPhysicalURI
public static java.net.URI getPhysicalURI(VirtualFile file) throws java.io.IOException
Get a physical URI for a virtual file. See the warnings on theVirtualFile.getPhysicalFile()
method before using this method.- Parameters:
file
- the virtual file- Returns:
- the physical file URL
- Throws:
java.io.IOException
- if an I/O error occurs getting the physical file
-
getRootURL
public static java.net.URL getRootURL(VirtualFile file) throws java.net.MalformedURLException
Get the physical root URL of the filesystem of a virtual file. This URL is suitable for use as a class loader's code source or in similar situations where only standard URL types (jar
andfile
) are supported.- Parameters:
file
- the virtual file- Returns:
- the root URL
- Throws:
java.net.MalformedURLException
- if the URL is not valid
-
getRootURI
public static java.net.URI getRootURI(VirtualFile file) throws java.net.URISyntaxException
Get the physical root URL of the filesystem of a virtual file. This URI is suitable for conversion to a class loader's code source URL or in similar situations where only standard URL types (jar
andfile
) are supported.- Parameters:
file
- the virtual file- Returns:
- the root URI
- Throws:
java.net.URISyntaxException
- if the URI is not valid
-
safeClose
public static void safeClose(java.io.Closeable c)
Safely close some resource without throwing an exception. Any exception will be logged at TRACE level.- Parameters:
c
- the resource
-
safeClose
public static void safeClose(java.io.Closeable... closeables)
Safely close some resource without throwing an exception. Any exception will be logged at TRACE level.- Parameters:
closeables
- the resources
-
safeClose
public static void safeClose(java.lang.Iterable<? extends java.io.Closeable> ci)
Safely close some resources without throwing an exception. Any exception will be logged at TRACE level.- Parameters:
ci
- the resources
-
safeClose
public static void safeClose(java.util.zip.ZipFile zipFile)
Safely close some resource without throwing an exception. Any exception will be logged at TRACE level.- Parameters:
zipFile
- the resource
-
isForceCaseSensitive
public static boolean isForceCaseSensitive()
-
exists
public static boolean exists(java.io.File file)
In case the file system is not case sensitive we compare the canonical path with the absolute path of the file after normalized.- Parameters:
file
-- Returns:
-
recursiveDelete
public static boolean recursiveDelete(java.io.File root)
Attempt to recursively delete a real file.- Parameters:
root
- the real file to delete- Returns:
true
if the file was deleted
-
recursiveDelete
public static boolean recursiveDelete(VirtualFile root)
Attempt to recursively delete a virtual file.- Parameters:
root
- the virtual file to delete- Returns:
true
if the file was deleted
-
recursiveCopy
public static void recursiveCopy(java.io.File original, java.io.File destDir) throws java.io.IOException
Recursively copy a file or directory from one location to another.- Parameters:
original
- the original file or directorydestDir
- the destination directory- Throws:
java.io.IOException
- if an I/O error occurs before the copy is complete
-
recursiveCopy
public static void recursiveCopy(java.io.File original, VirtualFile destDir) throws java.io.IOException
Recursively copy a file or directory from one location to another.- Parameters:
original
- the original file or directorydestDir
- the destination directory- Throws:
java.io.IOException
- if an I/O error occurs before the copy is complete
-
recursiveCopy
public static void recursiveCopy(VirtualFile original, java.io.File destDir) throws java.io.IOException
Recursively copy a file or directory from one location to another.- Parameters:
original
- the original virtual file or directorydestDir
- the destination directory- Throws:
java.io.IOException
- if an I/O error occurs before the copy is complete
-
recursiveCopy
public static void recursiveCopy(VirtualFile original, VirtualFile destDir) throws java.io.IOException
Recursively copy a file or directory from one location to another.- Parameters:
original
- the original virtual file or directorydestDir
- the destination virtual directory- Throws:
java.io.IOException
- if an I/O error occurs before the copy is complete
-
emptyStream
public static java.io.InputStream emptyStream()
Get the empty input stream. This stream always reports an immediate EOF.- Returns:
- the empty input stream
-
createJarFileInputStream
public static java.io.InputStream createJarFileInputStream(VirtualFile virtualFile) throws java.io.IOException
Get an input stream that will always be consumable as a Zip/Jar file. The input stream will not be an instance of a JarInputStream, but will stream bytes according to the Zip specification. Using this method, a VFS file or directory can be written to disk as a normal jar/zip file.- Parameters:
virtualFile
- The virtual to get a jar file input stream for- Returns:
- An input stream returning bytes according to the zip spec
- Throws:
java.io.IOException
- if any problems occur
-
unzip
public static void unzip(java.io.File zipFile, java.io.File destDir) throws java.io.IOException
Expand a zip file to a destination directory. The directory must exist. If an error occurs, the destination directory may contain a partially-extracted archive, so cleanup is up to the caller.- Parameters:
zipFile
- the zip filedestDir
- the destination directory- Throws:
java.io.IOException
- if an error occurs
-
getMountSource
public static java.io.File getMountSource(java.io.Closeable handle)
Return the mount source File for a given mount handle.- Parameters:
handle
- The handle to get the source for- Returns:
- The mount source file or null if the handle does not have a source, or is not a MountHandle
-
getGlobPattern
public static java.util.regex.Pattern getGlobPattern(java.lang.String glob)
Get a regular expression pattern which matches any path names which match the given glob. The glob patterns function similarly toant
file patterns. Valid meta-characters in the glob pattern include:"\"
- escape the next character (treat it literally, even if it is itself a recognized meta-character)"?"
- match any non-slash character"*"
- match zero or more non-slash characters"**"
- match zero or more characters, including slashes"/"
- match one or more slash characters. Consecutive/
characters are collapsed down into one.
ant
, if the pattern ends with a/
, then an implicit"**"
will be appended. See also: "Patterns" in the Ant Manual- Parameters:
glob
- the glob to match- Returns:
- the pattern
-
canonicalize
public static java.lang.String canonicalize(java.lang.String path)
Canonicalize the given path. Removes all.
and..
segments from the path.- Parameters:
path
- the relative or absolute possibly non-canonical path- Returns:
- the canonical path
-
-