Package org.jboss.vfs

Class VFSUtils

    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int DEFAULT_BUFFER_SIZE
      The default buffer size to use for copies
      static java.net.URLStreamHandler FILE_URL_HANDLER
      The URLStreamHandler for the 'file' protocol
      static java.lang.String FORCE_CASE_SENSITIVE_KEY
      Constant representing the system property for forcing case sensitive
      static java.lang.String VFS_PROTOCOL
      Constant representing the URL vfs protocol
      static java.net.URLStreamHandler VFS_URL_HANDLER
      The URLStreamHandler 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 paths
      static 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 original VirtualFile 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 both
      static void copyStreamAndClose​(java.io.InputStream is, java.io.OutputStream os, int bufferSize)
      Copy input stream to output stream and close them both
      static 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 archive
      static 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 files
      static 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 necessary
      static 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 given InputStream to the given virtual file, replacing its current contents (if any) or creating a new file if one does not exist.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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
        The URLStreamHandler for the 'vfs' protocol
      • FILE_URL_HANDLER

        public static final java.net.URLStreamHandler FILE_URL_HANDLER
        The URLStreamHandler 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 file
        paths - the paths to add to
        Throws:
        java.io.IOException - if there is an error reading the manifest or the virtual file is closed
        java.lang.IllegalStateException - if the file has no parent
        java.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 closed
        java.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 decode
        encoding - 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 fixed
        java.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 original VirtualFile the target recursively.
        Parameters:
        original - the file to copy children from
        target - 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 stream
        os - 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 stream
        os - output stream
        bufferSize - 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 stream
        os - 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 stream
        os - output stream
        bufferSize - 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 write
        bytes - 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 given InputStream 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 write
        is - 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 the File 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 the VirtualFile.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 the VirtualFile.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 and file) 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 and file) 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 directory
        destDir - 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 directory
        destDir - 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 directory
        destDir - 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 directory
        destDir - 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 file
        destDir - 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 to ant 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.
        In addition, like 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