org.springframework.core.io

## Interface Resource

- All Superinterfaces:
    InputStreamSource
  All Known Subinterfaces:
    ContextResource, WritableResource
  All Known Implementing Classes:
    AbstractFileResolvingResource, AbstractResource, ByteArrayResource, ClassPathResource, DescriptiveResource, FileSystemResource, InputStreamResource, PortletContextResource, ServletContextResource, UrlResource, VfsResource

      public interface Resource
      extends InputStreamSource

  Interface for a resource descriptor that abstracts from the actual type of underlying resource, such as a file or class path resource.

  An InputStream can be opened for every resource if it exists in physical form, but a URL or File handle can just be returned for certain resources. The actual behavior is implementation-specific.

  Since:
    28.12.2003
  Author:
    Juergen Hoeller
  See Also:
    `InputStreamSource.getInputStream()`, `getURL()`, `getURI()`, `getFile()`, `WritableResource`, `ContextResource`, `FileSystemResource`, `ClassPathResource`, `UrlResource`, `ByteArrayResource`, `InputStreamResource`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `long` | `contentLength()` Determine the content length for this resource.
    `Resource` | `createRelative(String relativePath)` Create a resource relative to this resource.
    `boolean` | `exists()` Return whether this resource actually exists in physical form.
    `String` | `getDescription()` Return a description for this resource, to be used for error output when working with the resource.
    `File` | `getFile()` Return a File handle for this resource.
    `String` | `getFilename()` Determine a filename for this resource, i.e.
    `URI` | `getURI()` Return a URI handle for this resource.
    `URL` | `getURL()` Return a URL handle for this resource.
    `boolean` | `isOpen()` Return whether this resource represents a handle with an open stream.
    `boolean` | `isReadable()` Return whether the contents of this resource can be read, e.g.
    `long` | `lastModified()` Determine the last-modified timestamp for this resource.

    - ### Methods inherited from interface org.springframework.core.io.InputStreamSource

      `getInputStream`

- - ### Method Detail

    - #### exists

          boolean exists()

      Return whether this resource actually exists in physical form.

      This method performs a definitive existence check, whereas the existence of a `Resource` handle only guarantees a valid descriptor handle.

    - #### isReadable

          boolean isReadable()

      Return whether the contents of this resource can be read, e.g. via `InputStreamSource.getInputStream()` or `getFile()`.

      Will be `true` for typical resource descriptors; note that actual content reading may still fail when attempted. However, a value of `false` is a definitive indication that the resource content cannot be read.

      See Also:
        `InputStreamSource.getInputStream()`

    - #### isOpen

          boolean isOpen()

      Return whether this resource represents a handle with an open stream. If true, the InputStream cannot be read multiple times, and must be read and closed to avoid resource leaks.

      Will be `false` for typical resource descriptors.

    - #### getURL

          URL getURL()
                     throws IOException

      Return a URL handle for this resource.
      Throws:
        `IOException` - if the resource cannot be resolved as URL, i.e. if the resource is not available as descriptor

    - #### getURI

          URI getURI()
                     throws IOException

      Return a URI handle for this resource.
      Throws:
        `IOException` - if the resource cannot be resolved as URI, i.e. if the resource is not available as descriptor

    - #### getFile

          File getFile()
                       throws IOException

      Return a File handle for this resource.
      Throws:
        `IOException` - if the resource cannot be resolved as absolute file path, i.e. if the resource is not available in a file system

    - #### contentLength

          long contentLength()
                             throws IOException

      Determine the content length for this resource.
      Throws:
        `IOException` - if the resource cannot be resolved (in the file system or as some other known physical resource type)

    - #### lastModified

          long lastModified()
                            throws IOException

      Determine the last-modified timestamp for this resource.
      Throws:
        `IOException` - if the resource cannot be resolved (in the file system or as some other known physical resource type)

    - #### createRelative

          Resource createRelative(String relativePath)
                                  throws IOException

      Create a resource relative to this resource.
      Parameters:
        `relativePath` - the relative path (relative to this resource)
      Returns:
        the resource handle for the relative resource
      Throws:
        `IOException` - if the relative resource cannot be determined

    - #### getFilename

          String getFilename()

      Determine a filename for this resource, i.e. typically the last part of the path: for example, "myfile.txt".

      Returns `null` if this type of resource does not have a filename.

    - #### getDescription

          String getDescription()

      Return a description for this resource, to be used for error output when working with the resource.

      Implementations are also encouraged to return this value from their `toString` method.

      See Also:
        `Object.toString()`