Class Resource

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Comparable<Resource>

    public abstract class Resource
    extends java.lang.Object
    implements java.io.Closeable, java.lang.Comparable<Resource>
    A classpath or module path resource (i.e. file) that was found in a whitelisted/non-blacklisted package inside a classpath element or module.
    • Field Detail

      • inputStream

        protected java.io.InputStream inputStream
      • byteBuffer

        protected java.nio.ByteBuffer byteBuffer
      • length

        protected long length
      • isOpen

        protected boolean isOpen
    • Constructor Detail

      • Resource

        public Resource()
    • Method Detail

      • byteBufferToInputStream

        protected java.io.InputStream byteBufferToInputStream()
      • inputStreamToByteBuffer

        protected java.nio.ByteBuffer inputStreamToByteBuffer()
                                                       throws java.io.IOException
        Throws:
        java.io.IOException
      • inputStreamToByteArray

        protected byte[] inputStreamToByteArray()
                                         throws java.io.IOException
        Throws:
        java.io.IOException
      • byteBufferToByteArray

        protected byte[] byteBufferToByteArray()
      • markAsOpen

        protected void markAsOpen()
                           throws java.io.IOException
        Mark the resource as open.
        Throws:
        java.io.IOException - If the resource is already open.
      • markAsClosed

        protected void markAsClosed()
        Mark the resource as closed.
      • getPath

        public abstract java.lang.String getPath()
        Returns:
        the path of this classpath resource relative to the package root within the classpath element. For example, for a resource path of "BOOT-INF/classes/com/xyz/resource.xml" and a package root of "BOOT-INF/classes/", returns "com/xyz/resource.xml". Also drops version prefixes for multi-version jars, for example for a resource path of "META-INF/versions/11/com/xyz/resource.xml" while running on JDK 11+, returns "com/xyz/resource.xml".
      • getPathRelativeToClasspathElement

        public abstract java.lang.String getPathRelativeToClasspathElement()
        Returns:
        the full path of this classpath resource within the classpath element (see JarEntry::getRealPath). For example, will return the full path of "BOOT-INF/classes/com/xyz/resource.xml" or "META-INF/versions/11/com/xyz/resource.xml", not "com/xyz/resource.xml".
      • getURL

        public abstract java.net.URL getURL()
        Returns:
        A URL representing the resource's location. May point to a temporary file that ClassGraph extracted an inner jar or directory to, or downloaded a remote jar to. You may or may not be able to fetch content from the URL.
        Throws:
        java.lang.IllegalArgumentException - if a MalformedURLException occurred while trying to construct the URL.
      • getClasspathElementURL

        public abstract java.net.URL getClasspathElementURL()
        Returns:
        The URL of the classpath element that this class was found within.
      • getClasspathElementFile

        public abstract java.io.File getClasspathElementFile()
        Returns:
        The File for the classpath element package root dir or jar that this was found within, or null if this Resource was found in a module. (See also getModuleRef().)
      • open

        public abstract java.io.InputStream open()
                                          throws java.io.IOException
        Open an InputStream for a classpath resource. Make sure you call close() when you are finished with the InputStream, so that the InputStream is closed.
        Returns:
        The opened InputStream.
        Throws:
        java.io.IOException - If the InputStream could not be opened.
      • read

        public abstract java.nio.ByteBuffer read()
                                          throws java.io.IOException
        Open a ByteBuffer for a classpath resource. Make sure you call close() when you are finished with the ByteBuffer, so that the ByteBuffer is released or unmapped.
        Returns:
        The allocated or mapped ByteBuffer for the resource file content.
        Throws:
        java.io.IOException - If the resource could not be opened.
      • load

        public abstract byte[] load()
                             throws java.io.IOException
        Load a classpath resource and return its content as a byte array. Automatically calls close() after loading the byte array and before returning it, so that the underlying InputStream is closed or the underlying ByteBuffer is released or unmapped.
        Returns:
        The contents of the resource file.
        Throws:
        java.io.IOException - If the file contents could not be loaded in their entirety.
      • getLength

        public long getLength()
        Returns:
        The length of the resource. This only reliably returns a valid value after calling open(), read(), or load(), and for open(), only if the underlying jarfile has length information for corresponding ZipEntry (some jarfiles may not have length information in their zip entries). Returns -1L if the length is unknown.
      • toString

        public java.lang.String toString()
        Return a string representation of the resource's location (as a URL string).
        Overrides:
        toString in class java.lang.Object
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
      • compareTo

        public int compareTo​(Resource o)
        Specified by:
        compareTo in interface java.lang.Comparable<Resource>
      • close

        public void close()
        Close the underlying InputStream, or release/unmap the underlying ByteBuffer.
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable