Package io.github.classgraph
Class Resource
- java.lang.Object
-
- io.github.classgraph.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected class
Resource.InputStreamResourceCloser
Class for closing the parentResource
when anInputStream
opened on the resource is closed.
-
Field Summary
Fields Modifier and Type Field Description protected java.nio.ByteBuffer
byteBuffer
The byte buffer, or null.protected java.io.InputStream
inputStream
The input stream, or null.protected long
length
The length, or -1L for unknown.
-
Constructor Summary
Constructors Constructor Description Resource(io.github.classgraph.ClasspathElement classpathElement, long length)
Constructor.
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected byte[]
byteBufferToByteArray()
Read/copy contents of aByteBuffer
as a byte array.protected java.io.InputStream
byteBufferToInputStream()
Create anInputStream
from aByteBuffer
.void
close()
Close the underlying InputStream, or release/unmap the underlying ByteBuffer.int
compareTo(Resource o)
boolean
equals(java.lang.Object obj)
java.io.File
getClasspathElementFile()
Get the classpath elementFile
.java.net.URI
getClasspathElementURI()
Get theURI
of the classpath element or module that this resource was obtained from.java.net.URL
getClasspathElementURL()
Get theURL
of the classpath element or module that this resource was obtained from.java.lang.String
getContentAsString()
Convenience method to get the content of thisResource
as a String.long
getLength()
Get the length of the resource.ModuleRef
getModuleRef()
abstract java.lang.String
getPath()
Get the path of this classpath resource relative to the package root.abstract java.lang.String
getPathRelativeToClasspathElement()
Get the full path of this classpath resource relative to the root of the classpath element.java.net.URI
getURI()
Get theURI
representing the resource's location.java.net.URL
getURL()
Get theURL
representing the resource's location.int
hashCode()
protected byte[]
inputStreamToByteArray()
Read all bytes from anInputStream
and return as a byte array.protected java.nio.ByteBuffer
inputStreamToByteBuffer()
Create aByteBuffer
from anInputStream
.abstract byte[]
load()
Load a classpath resource and return its content as a byte array.protected void
markAsClosed()
Mark the resource as closed.protected void
markAsOpen()
Mark the resource as open.abstract java.io.InputStream
open()
Open anInputStream
for a classpath resource.abstract java.nio.ByteBuffer
read()
Open aByteBuffer
for a classpath resource.java.lang.String
toString()
Get a string representation of the resource's location (as a URL string).
-
-
-
Method Detail
-
byteBufferToInputStream
protected java.io.InputStream byteBufferToInputStream()
Create anInputStream
from aByteBuffer
.- Returns:
- the input stream
-
inputStreamToByteBuffer
protected java.nio.ByteBuffer inputStreamToByteBuffer() throws java.io.IOException
Create aByteBuffer
from anInputStream
.- Returns:
- the byte buffer
- Throws:
java.io.IOException
- if an I/O exception occurs.
-
inputStreamToByteArray
protected byte[] inputStreamToByteArray() throws java.io.IOException
Read all bytes from anInputStream
and return as a byte array.- Returns:
- the contents of the
InputStream
. - Throws:
java.io.IOException
- if an I/O exception occurs.
-
byteBufferToByteArray
protected byte[] byteBufferToByteArray()
Read/copy contents of aByteBuffer
as a byte array.- Returns:
- the contents of the
ByteBuffer
as a byte array.
-
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.
-
getURI
public java.net.URI getURI()
Get theURI
representing the resource's location.- Returns:
- A
URI
representing the resource's location. - Throws:
java.lang.IllegalArgumentException
- the resource was obtained from a module and the module's location URI is null.
-
getURL
public java.net.URL getURL()
Get theURL
representing the resource's location. UsegetURI()
instead if the resource may have come from a system module, or if this is a jlink'd runtime image, since "jrt:" URI schemes used by system modules and jlink'd runtime images are not suppored byURL
, and this will causeIllegalArgumentException
to be thrown.- Returns:
- A
URL
representing the resource's location. - Throws:
java.lang.IllegalArgumentException
- if the resource was obtained from a system module or jlink'd runtime image with a "jrt:" location URI, or the resource was obtained from a module and the module's location URI is null
-
getClasspathElementURI
public java.net.URI getClasspathElementURI()
Get theURI
of the classpath element or module that this resource was obtained from.- Returns:
- The
URL
of the classpath element or module that this resource was found within. - Throws:
java.lang.IllegalArgumentException
- if the resource was obtained from a module and the module's location URI is null.
-
getClasspathElementURL
public java.net.URL getClasspathElementURL()
Get theURL
of the classpath element or module that this resource was obtained from. UsegetClasspathElementURI()
instead if the resource may have come from a system module, or if this is a jlink'd runtime image, since "jrt:" URI schemes used by system modules and jlink'd runtime images are not suppored byURL
, and this will causeIllegalArgumentException
to be thrown.- Returns:
- The
URL
of the classpath element or module that this resource was found within. - Throws:
java.lang.IllegalArgumentException
- if the resource was obtained from a system module or jlink'd runtime image with a "jrt:" location URI, or the resource was obtained from a module and the module's location URI is null.
-
getClasspathElementFile
public java.io.File getClasspathElementFile()
Get the classpath elementFile
.
-
getModuleRef
public ModuleRef getModuleRef()
-
getContentAsString
public java.lang.String getContentAsString() throws java.io.IOException
Convenience method to get the content of thisResource
as a String. Assumes UTF8 encoding. (Callsclose()
after completion.)- Returns:
- the content of this
Resource
as a String. - Throws:
java.io.IOException
- If an I/O exception occurred.
-
getPath
public abstract java.lang.String getPath()
Get the path of this classpath resource relative to the package root.- Returns:
- the path of this classpath resource relative to the package root. 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 9+, returns"com/xyz/resource.xml"
.
-
getPathRelativeToClasspathElement
public abstract java.lang.String getPathRelativeToClasspathElement()
Get the full path of this classpath resource relative to the root of the classpath element.- Returns:
- the full path of this classpath resource within the classpath element. 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"
.
-
open
public abstract java.io.InputStream open() throws java.io.IOException
Open anInputStream
for a classpath resource. Make sure you callclose()
when you are finished with theInputStream
, so that theInputStream
is closed.- Returns:
- The opened
InputStream
. - Throws:
java.io.IOException
- If theInputStream
could not be opened.
-
read
public abstract java.nio.ByteBuffer read() throws java.io.IOException
Open aByteBuffer
for a classpath resource. Make sure you callclose()
when you are finished with theByteBuffer
, so that theByteBuffer
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 callsclose()
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()
Get the length of the resource.- Returns:
- The length of the resource. This only reliably returns a valid value after calling
open()
,read()
, orload()
(and foropen()
, only if the underlying jarfile has length information for correspondingZipEntry
-- some jarfiles may not have length information in their zip entries). Returns -1L if the length is unknown.
-
toString
public java.lang.String toString()
Get a string representation of the resource's location (as a URL string).- Overrides:
toString
in classjava.lang.Object
- Returns:
- the resource location as a URL String.
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classjava.lang.Object
-
compareTo
public int compareTo(Resource o)
- Specified by:
compareTo
in interfacejava.lang.Comparable<Resource>
-
close
public void close()
Close the underlying InputStream, or release/unmap the underlying ByteBuffer.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
-
-