Package 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`, `ModuleResource`, `PathResource`, `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, Sam Brannen

## Constructor Summary

Constructors
Constructor
Description
`AbstractResource()`

## Method Summary

Modifier and Type
Method
Description
`long`
`contentLength()`
This method reads the entire InputStream to determine 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 other)`
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`
`isFile()`
This implementation always returns `false`.
`boolean`
`isOpen()`
This implementation always returns `false`.
`boolean`
`isReadable()`
This implementation always returns `true` for a resource that `exists` (revised as of 5.1).
`long`
`lastModified()`
This implementation checks the timestamp of the underlying File, if available.
`ReadableByteChannel`
`readableChannel()`
This implementation returns `Channels.newChannel(InputStream)` with the result of `InputStreamSource.getInputStream()`.
`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.InputStreamSource

`getInputStream`

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

`getContentAsByteArray, getContentAsString, getDescription`

## Constructor Details

### AbstractResource

public AbstractResource()

## Method Details

### 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` for a resource that `exists` (revised as of 5.1).

Specified by:
  `isReadable` in interface `Resource`
See Also:
  - `InputStreamSource.getInputStream()`
  - `Resource.exists()`

### isOpen

public boolean isOpen()
This implementation always returns `false`.

Specified by:
  `isOpen` in interface `Resource`

### isFile

public boolean isFile()
This implementation always returns `false`.

Specified by:
  `isFile` in interface `Resource`
See Also:
  - `Resource.getFile()`

### 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 a 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 a 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:
  `FileNotFoundException` - if the resource cannot be resolved as absolute file path, i.e. if the resource is not available in a file system
  `IOException` - in case of general resolution/reading failures
See Also:
  - `InputStreamSource.getInputStream()`

### readableChannel

public ReadableByteChannel readableChannel() throws IOException
This implementation returns `Channels.newChannel(InputStream)` with the result of `InputStreamSource.getInputStream()`.

This is the same as in `Resource`'s corresponding default method but mirrored here for efficient JVM-level dispatching in a class hierarchy.

Specified by:
  `readableChannel` in interface `Resource`
Returns:
  the byte channel for the underlying resource (must not be `null`)
Throws:
  `FileNotFoundException` - if the underlying resource doesn't exist
  `IOException` - if the content channel could not be opened
See Also:
  - `InputStreamSource.getInputStream()`

### contentLength

public long contentLength() throws IOException
This method reads the entire InputStream to determine the content length.

For a custom subclass of `InputStreamResource`, we strongly recommend overriding this method with a more optimal implementation, for example, checking File length, or possibly simply returning -1 if the stream can only be read once.

Specified by:
  `contentLength` 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:
  - `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:
  `FileNotFoundException` - if the resource cannot be resolved as an absolute file path, i.e. is not available in a file system
  `IOException` - in case of general resolution/reading failures

### 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

@Nullable public String getFilename()
This implementation always returns `null`, assuming that this resource type does not have a filename.

Specified by:
  `getFilename` in interface `Resource`

### equals

public boolean equals(@Nullable Object other)
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()`

### toString

public String toString()
This implementation returns the description of this resource.

Overrides:
  `toString` in class `Object`
See Also:
  - `Resource.getDescription()`