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
`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()`