Package io.github.classgraph
Class Resource
java.lang.Object
io.github.classgraph.Resource
- All Implemented Interfaces:
Closeable
,AutoCloseable
,Comparable<Resource>
A classpath or module path resource (i.e. file) that was found in an accepted/non-rejected package inside a
classpath element or module.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected ByteBuffer
The byte buffer, or null.private final ClasspathElement
The classpath element this resource was obtained from.protected InputStream
The input stream, or null.protected long
The length, or -1L for unknown.(package private) LogNode
TheLogNode
used to log that the resource was found when classpath element paths are scanned.private String
The cached result of toString(). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
close()
Close the underlying InputStream, or release/unmap the underlying ByteBuffer.int
Compare to.boolean
Equals.Get the classpath elementFile
.Get theURI
of the classpath element or module that this resource was obtained from.Get theURL
of the classpath element or module that this resource was obtained from.Convenience method to get the content of thisResource
as a String.abstract long
Get the last modified time for the resource, in milliseconds since the epoch.long
Get the length of the resource.abstract String
getPath()
Get the path of this classpath resource relative to the package root.Get the full path of this classpath resource relative to the root of the classpath element.abstract Set
<PosixFilePermission> Get the POSIX file permissions for the resource.getURI()
Get theURI
representing the resource's location.getURL()
Get theURL
representing the resource's location.int
hashCode()
Hash code.abstract byte[]
load()
Load a classpath resource and return its content as a byte array.abstract InputStream
open()
Open anInputStream
for a classpath resource.(package private) abstract ClassfileReader
Open aClassfileReader
on the resource (for reading classfiles).abstract ByteBuffer
read()
Open aByteBuffer
for a classpath resource.Open aByteBuffer
for a classpath resource, and wrap it in aCloseableByteBuffer
instance, which implements theCloseable.close()
method to free the underlyingByteBuffer
whenCloseableByteBuffer.close()
is called, by automatically callingclose()
.toString()
Get a string representation of the resource's location (as a URL string).private static URL
Convert a URI to URL, catching "jrt:" URIs as invalid.
-
Field Details
-
classpathElement
The classpath element this resource was obtained from. -
inputStream
The input stream, or null. -
byteBuffer
The byte buffer, or null. -
length
protected long lengthThe length, or -1L for unknown. -
toString
The cached result of toString(). -
scanLog
LogNode scanLogTheLogNode
used to log that the resource was found when classpath element paths are scanned. In the case of accepted classfile resources, sublog entries are added when the classfile's contents are scanned.
-
-
Constructor Details
-
Resource
Constructor.- Parameters:
classpathElement
- the classpath element this resource was obtained from.length
- the length the length of the resource.
-
-
Method Details
-
uriToURL
Convert a URI to URL, catching "jrt:" URIs as invalid.- Parameters:
uri
- the uri- Returns:
- the URL.
- Throws:
IllegalArgumentException
- if the URI could not be converted to a URL, or the URI had "jrt:" scheme.
-
getURI
Get theURI
representing the resource's location.- Returns:
- A
URI
representing the resource's location. - Throws:
IllegalArgumentException
- the resource was obtained from a module and the module's location URI is null.
-
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 supported byURL
, and this will causeIllegalArgumentException
to be thrown.- Returns:
- A
URL
representing the resource's location. - Throws:
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
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:
IllegalArgumentException
- if the classpath element does not have a valid URI (e.g. for modules whose location URI is null).
-
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 supported byURL
, and this will causeIllegalArgumentException
to be thrown.- Returns:
- The
URL
of the classpath element or module that this resource was found within. - Throws:
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
Get the classpath elementFile
.- Returns:
- The
File
for the classpath element package root dir or jar that thisResource
was found within, or null if thisResource
was found in a module backed by a "jrt:" URI, or a module with an unknown location. May also return null if the classpath element was an http/https URL, and the jar was downloaded directly to RAM, rather than to a temp file on disk (e.g. if the temp dir is not writeable).
-
getModuleRef
-
getContentAsString
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:
IOException
- If an I/O exception occurred.
-
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
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
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:
IOException
- If theInputStream
could not be opened.
-
read
Open aByteBuffer
for a classpath resource. Make sure you callclose()
when you are finished with theByteBuffer
, so that theByteBuffer
is released or unmapped. See alsoreadCloseable()
.- Returns:
- The allocated or mapped
ByteBuffer
for the resource file content. - Throws:
IOException
- If the resource could not be read.
-
readCloseable
Open aByteBuffer
for a classpath resource, and wrap it in aCloseableByteBuffer
instance, which implements theCloseable.close()
method to free the underlyingByteBuffer
whenCloseableByteBuffer.close()
is called, by automatically callingclose()
.Call
CloseableByteBuffer.getByteBuffer()
on the returned instance to access the underlyingByteBuffer
.- Returns:
- The allocated or mapped
ByteBuffer
for the resource file content. - Throws:
IOException
- If the resource could not be read.
-
load
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:
IOException
- If the file contents could not be loaded in their entirety.
-
openClassfile
Open aClassfileReader
on the resource (for reading classfiles).- Returns:
- the
ClassfileReader
. - Throws:
IOException
- if an I/O exception occurs.
-
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.
-
getLastModified
public abstract long getLastModified()Get the last modified time for the resource, in milliseconds since the epoch. This time is obtained from the directory entry, if this resource is a file on disk, or from the zipfile central directory, if this resource is a zipfile entry. Timestamps are not available for resources obtained from system modules or jlink'd modules.Note: The ZIP format has no notion of timezone, so timestamps are only meaningful if it is known what timezone they were created in. We arbitrarily assume that zipfile timestamps are in the UTC timezone. This may be a wrong assumption, so you may need to apply a timezone correction if you know the timezone used by the zipfile creator.
- Returns:
- The millis since the epoch indicating the date / time that this file resource was last modified. Returns 0L if the last modified date is unknown.
-
getPosixFilePermissions
Get the POSIX file permissions for the resource. POSIX file permissions are obtained from the directory entry, if this resource is a file on disk, or from the zipfile central directory, if this resource is a zipfile entry. POSIX file permissions are not available for resources obtained from system modules or jlink'd modules, and may not be available on non-POSIX-compliant operating systems or non-POSIX filesystems.- Returns:
- The set of
PosixFilePermission
permission flags for the resource, or null if unknown.
-
toString
Get a string representation of the resource's location (as a URL string). -
hashCode
public int hashCode()Hash code. -
equals
Equals. -
compareTo
Compare to.- Specified by:
compareTo
in interfaceComparable<Resource>
- Parameters:
o
- the o- Returns:
- the int
-
close
public void close()Close the underlying InputStream, or release/unmap the underlying ByteBuffer.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-