org.springframework.core.io

## Class AbstractResource

- java.lang.Object
- - org.springframework.core.io.AbstractResource

- All Implemented Interfaces:
    InputStreamSource, Resource
  Direct Known Subclasses:
    AbstractFileResolvingResource, ByteArrayResource, DescriptiveResource, FileSystemResource, InputStreamResource, VfsResource

      public abstract class AbstractResource
      extends Object
      implements Resource

  Convenience base class for `Resource` implementations, pre-implementing typical behavior.

  The "exists" method will check whether a File or InputStream can be opened; "isOpen" will always return false; "getURL" and "getFile" throw an exception; and "toString" will return the description.

  Since:
    28.12.2003
  Author:
    Juergen Hoeller

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractResource()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `long` | `contentLength()` This implementation reads the entire InputStream to calculate the content length.
    `Resource` | `createRelative(String relativePath)` This implementation throws a FileNotFoundException, assuming that relative resources cannot be created for this resource.
    `boolean` | `equals(Object obj)` This implementation compares description strings.
    `boolean` | `exists()` This implementation checks whether a File can be opened, falling back to whether an InputStream can be opened.
    `File` | `getFile()` This implementation throws a FileNotFoundException, assuming that the resource cannot be resolved to an absolute file path.
    `protected File` | `getFileForLastModifiedCheck()` Determine the File to use for timestamp checking.
    `String` | `getFilename()` This implementation always returns `null`, assuming that this resource type does not have a filename.
    `URI` | `getURI()` This implementation builds a URI based on the URL returned by `getURL()`.
    `URL` | `getURL()` This implementation throws a FileNotFoundException, assuming that the resource cannot be resolved to a URL.
    `int` | `hashCode()` This implementation returns the description's hash code.
    `boolean` | `isOpen()` This implementation always returns `false`.
    `boolean` | `isReadable()` This implementation always returns `true`.
    `long` | `lastModified()` This implementation checks the timestamp of the underlying File, if available.
    `String` | `toString()` This implementation returns the description of this resource.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

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

      `getDescription`

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

      `getInputStream`

- - ### Constructor Detail

    - #### AbstractResource

          public AbstractResource()

  - ### Method Detail

    - #### exists

          public boolean exists()

      This implementation checks whether a File can be opened, falling back to whether an InputStream can be opened. This will cover both directories and content resources.
      Specified by:
        `exists` in interface `Resource`

    - #### isReadable

          public boolean isReadable()

      This implementation always returns `true`.
      Specified by:
        `isReadable` in interface `Resource`
      See Also:
        `InputStreamSource.getInputStream()`

    - #### isOpen

          public boolean isOpen()

      This implementation always returns `false`.
      Specified by:
        `isOpen` in interface `Resource`

    - #### getURL

          public URL getURL()
                     throws IOException

      This implementation throws a FileNotFoundException, assuming that the resource cannot be resolved to a URL.
      Specified by:
        `getURL` in interface `Resource`
      Throws:
        `IOException` - if the resource cannot be resolved as URL, i.e. if the resource is not available as descriptor

    - #### getURI

          public URI getURI()
                     throws IOException

      This implementation builds a URI based on the URL returned by `getURL()`.
      Specified by:
        `getURI` in interface `Resource`
      Throws:
        `IOException` - if the resource cannot be resolved as URI, i.e. if the resource is not available as descriptor

    - #### getFile

          public File getFile()
                       throws IOException

      This implementation throws a FileNotFoundException, assuming that the resource cannot be resolved to an absolute file path.
      Specified by:
        `getFile` in interface `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

          public long contentLength()
                             throws IOException

      This implementation reads the entire InputStream to calculate the content length. Subclasses will almost always be able to provide a more optimal version of this, e.g. checking a File length.
      Specified by:
        `contentLength` in interface `Resource`
      Throws:
        `IllegalStateException` - if `InputStreamSource.getInputStream()` returns null.
        `IOException` - if the resource cannot be resolved (in the file system or as some other known physical resource type)
      See Also:
        `InputStreamSource.getInputStream()`

    - #### lastModified

          public long lastModified()
                            throws IOException

      This implementation checks the timestamp of the underlying File, if available.
      Specified by:
        `lastModified` in interface `Resource`
      Throws:
        `IOException` - if the resource cannot be resolved (in the file system or as some other known physical resource type)
      See Also:
        `getFileForLastModifiedCheck()`

    - #### getFileForLastModifiedCheck

          protected File getFileForLastModifiedCheck()
                                              throws IOException

      Determine the File to use for timestamp checking.

      The default implementation delegates to `getFile()`.

      Returns:
        the File to use for timestamp checking (never `null`)
      Throws:
        `IOException` - if the resource cannot be resolved as absolute file path, i.e. if the resource is not available in a file system

    - #### createRelative

          public Resource createRelative(String relativePath)
                                  throws IOException

      This implementation throws a FileNotFoundException, assuming that relative resources cannot be created for this resource.
      Specified by:
        `createRelative` in interface `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

          public String getFilename()

      This implementation always returns `null`, assuming that this resource type does not have a filename.
      Specified by:
        `getFilename` in interface `Resource`

    - #### toString

          public String toString()

      This implementation returns the description of this resource.
      Overrides:
        `toString` in class `Object`
      See Also:
        `Resource.getDescription()`

    - #### equals

          public boolean equals(Object obj)

      This implementation compares description strings.
      Overrides:
        `equals` in class `Object`
      See Also:
        `Resource.getDescription()`

    - #### hashCode

          public int hashCode()

      This implementation returns the description's hash code.
      Overrides:
        `hashCode` in class `Object`
      See Also:
        `Resource.getDescription()`