Package org.springframework.core.io

# Class PathResource

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

All Implemented Interfaces:
  `InputStreamSource`, `Resource`, `WritableResource`

public class PathResource extends AbstractResource implements WritableResource
`Resource` implementation for `Path` handles, performing all operations and transformations via the `Path` API. Supports resolution as a `File` and also as a `URL`. Implements the extended `WritableResource` interface.

Note: As of 5.1, `Path` support is also available in `FileSystemResource`, applying Spring's standard String-based path transformations but performing all operations via the `Files` API. This `PathResource` is effectively a pure `java.nio.path.Path` based alternative with different `createRelative` behavior.

Since:
  4.0
Author:
  Philippe Marschall, Juergen Hoeller
See Also:
  - `Path`
  - `Files`
  - `FileSystemResource`

## Constructor Summary

Constructors
Constructor
Description
`PathResource(String path)`
Create a new `PathResource` from a path string.
`PathResource(URI uri)`
Create a new `PathResource` from a `URI`.
`PathResource(Path path)`
Create a new `PathResource` from a `Path` handle.

## Method Summary

Modifier and Type
Method
Description
`long`
`contentLength()`
This implementation returns the underlying file's length.
`Resource`
`createRelative(String relativePath)`
This implementation creates a `PathResource`, applying the given path relative to the path of the underlying file of this resource descriptor.
`boolean`
`equals(Object other)`
This implementation compares the underlying `Path` references.
`boolean`
`exists()`
This implementation returns whether the underlying file exists.
`byte[]`
`getContentAsByteArray()`
Return the contents of this resource as a byte array.
`String`
`getContentAsString(Charset charset)`
Return the contents of this resource as a string, using the specified charset.
`String`
`getDescription()`
Return a description for this resource, to be used for error output when working with the resource.
`File`
`getFile()`
This implementation returns the underlying `File` reference.
`String`
`getFilename()`
This implementation returns the name of the file.
`InputStream`
`getInputStream()`
This implementation opens an `InputStream` for the underlying file.
`OutputStream`
`getOutputStream()`
This implementation opens an `OutputStream` for the underlying file.
`final String`
`getPath()`
Return the file path for this resource.
`URI`
`getURI()`
This implementation returns a `URI` for the underlying file.
`URL`
`getURL()`
This implementation returns a `URL` for the underlying file.
`int`
`hashCode()`
This implementation returns the hash code of the underlying `Path` reference.
`boolean`
`isFile()`
This implementation always indicates a file.
`boolean`
`isReadable()`
This implementation checks whether the underlying file is marked as readable (and corresponds to an actual file with content, not to a directory).
`boolean`
`isWritable()`
This implementation checks whether the underlying file is marked as writable (and corresponds to an actual file with content, not to a directory).
`long`
`lastModified()`
This implementation returns the underlying file's timestamp.
`ReadableByteChannel`
`readableChannel()`
This implementation opens a `ReadableByteChannel` for the underlying file.
`WritableByteChannel`
`writableChannel()`
This implementation opens a `WritableByteChannel` for the underlying file.

### Methods inherited from class org.springframework.core.io.AbstractResource

`getFileForLastModifiedCheck, isOpen, toString`

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

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

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

`isOpen`

## Constructor Details

### PathResource

public PathResource(Path path)
Create a new `PathResource` from a `Path` handle.

Note: Unlike `FileSystemResource`, when building relative resources via `createRelative(java.lang.String)`, the relative path will be built underneath the given root: for example, Paths.get("C:/dir1/"), relative path "dir2" → "C:/dir1/dir2"!

Parameters:
  `path` - a Path handle

### PathResource

public PathResource(String path)
Create a new `PathResource` from a path string.

Note: Unlike `FileSystemResource`, when building relative resources via `createRelative(java.lang.String)`, the relative path will be built underneath the given root: for example, Paths.get("C:/dir1/"), relative path "dir2" → "C:/dir1/dir2"!

Parameters:
  `path` - a path
See Also:
  - `Paths.get(String, String...)`

### PathResource

public PathResource(URI uri)
Create a new `PathResource` from a `URI`.

Note: Unlike `FileSystemResource`, when building relative resources via `createRelative(java.lang.String)`, the relative path will be built underneath the given root: for example, Paths.get("C:/dir1/"), relative path "dir2" → "C:/dir1/dir2"!

Parameters:
  `uri` - a path URI
See Also:
  - `Paths.get(URI)`

## Method Details

### getPath

public final String getPath()
Return the file path for this resource.

### exists

public boolean exists()
This implementation returns whether the underlying file exists.

Specified by:
  `exists` in interface `Resource`
Overrides:
  `exists` in class `AbstractResource`
See Also:
  - `Files.exists(Path, java.nio.file.LinkOption...)`

### isReadable

public boolean isReadable()
This implementation checks whether the underlying file is marked as readable (and corresponds to an actual file with content, not to a directory).

Specified by:
  `isReadable` in interface `Resource`
Overrides:
  `isReadable` in class `AbstractResource`
See Also:
  - `Files.isReadable(Path)`
  - `Files.isDirectory(Path, java.nio.file.LinkOption...)`

### getInputStream

public InputStream getInputStream() throws IOException
This implementation opens an `InputStream` for the underlying file.

Specified by:
  `getInputStream` in interface `InputStreamSource`
Returns:
  the input stream for the underlying resource (must not be `null`)
Throws:
  `FileNotFoundException` - if the underlying resource does not exist
  `IOException` - if the content stream could not be opened
See Also:
  - `FileSystemProvider.newInputStream(Path, OpenOption...)`

### getContentAsByteArray

public byte[] getContentAsByteArray() throws IOException
Description copied from interface: `Resource`
Return the contents of this resource as a byte array.

Specified by:
  `getContentAsByteArray` in interface `Resource`
Returns:
  the contents of this resource as byte array
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

### getContentAsString

public String getContentAsString(Charset charset) throws IOException
Description copied from interface: `Resource`
Return the contents of this resource as a string, using the specified charset.

Specified by:
  `getContentAsString` in interface `Resource`
Parameters:
  `charset` - the charset to use for decoding
Returns:
  the contents of this resource as a `String`
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

### isWritable

public boolean isWritable()
This implementation checks whether the underlying file is marked as writable (and corresponds to an actual file with content, not to a directory).

Specified by:
  `isWritable` in interface `WritableResource`
See Also:
  - `Files.isWritable(Path)`
  - `Files.isDirectory(Path, java.nio.file.LinkOption...)`

### getOutputStream

public OutputStream getOutputStream() throws IOException
This implementation opens an `OutputStream` for the underlying file.

Specified by:
  `getOutputStream` in interface `WritableResource`
Throws:
  `IOException` - if the stream could not be opened
See Also:
  - `FileSystemProvider.newOutputStream(Path, OpenOption...)`

### getURL

public URL getURL() throws IOException
This implementation returns a `URL` for the underlying file.

Specified by:
  `getURL` in interface `Resource`
Overrides:
  `getURL` in class `AbstractResource`
Throws:
  `IOException` - if the resource cannot be resolved as URL, i.e. if the resource is not available as a descriptor
See Also:
  - `Path.toUri()`
  - `URI.toURL()`

### getURI

public URI getURI() throws IOException
This implementation returns a `URI` for the underlying file.

Specified by:
  `getURI` in interface `Resource`
Overrides:
  `getURI` in class `AbstractResource`
Throws:
  `IOException` - if the resource cannot be resolved as URI, i.e. if the resource is not available as a descriptor
See Also:
  - `Path.toUri()`

### isFile

public boolean isFile()
This implementation always indicates a file.

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

### getFile

public File getFile() throws IOException
This implementation returns the underlying `File` reference.

Specified by:
  `getFile` in interface `Resource`
Overrides:
  `getFile` in class `AbstractResource`
Throws:
  `FileNotFoundException` - if the resource cannot be resolved as a file
  `IOException` - in case of general resolution/reading failures
See Also:
  - `InputStreamSource.getInputStream()`

### readableChannel

public ReadableByteChannel readableChannel() throws IOException
This implementation opens a `ReadableByteChannel` for the underlying file.

Specified by:
  `readableChannel` in interface `Resource`
Overrides:
  `readableChannel` in class `AbstractResource`
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:
  - `Files.newByteChannel(Path, OpenOption...)`

### writableChannel

public WritableByteChannel writableChannel() throws IOException
This implementation opens a `WritableByteChannel` for the underlying file.

Specified by:
  `writableChannel` in interface `WritableResource`
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:
  - `Files.newByteChannel(Path, OpenOption...)`

### contentLength

public long contentLength() throws IOException
This implementation returns the underlying file's length.

Specified by:
  `contentLength` in interface `Resource`
Overrides:
  `contentLength` in class `AbstractResource`
Returns:
  the content length (or -1 if undetermined)
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 returns the underlying file's timestamp.

Specified by:
  `lastModified` in interface `Resource`
Overrides:
  `lastModified` in class `AbstractResource`
Returns:
  the last-modified timestamp (or 0 if not known)
Throws:
  `IOException` - if the resource cannot be resolved (in the file system or as some other known physical resource type)
See Also:
  - `Files.getLastModifiedTime(Path, java.nio.file.LinkOption...)`

### createRelative

public Resource createRelative(String relativePath)
This implementation creates a `PathResource`, applying the given path relative to the path of the underlying file of this resource descriptor.

Specified by:
  `createRelative` in interface `Resource`
Overrides:
  `createRelative` in class `AbstractResource`
Parameters:
  `relativePath` - the relative path (relative to this resource)
Returns:
  the resource handle for the relative resource
See Also:
  - `Path.resolve(String)`

### getFilename

public String getFilename()
This implementation returns the name of the file.

Specified by:
  `getFilename` in interface `Resource`
Overrides:
  `getFilename` in class `AbstractResource`
See Also:
  - `Path.getFileName()`

### getDescription

public String getDescription()
Description copied from interface: `Resource`
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.

Specified by:
  `getDescription` in interface `Resource`
See Also:
  - `Object.toString()`

### equals

public boolean equals(@Nullable Object other)
This implementation compares the underlying `Path` references.

Overrides:
  `equals` in class `AbstractResource`
See Also:
  - `Resource.getDescription()`

### hashCode

public int hashCode()
This implementation returns the hash code of the underlying `Path` reference.

Overrides:
  `hashCode` in class `AbstractResource`
See Also:
  - `Resource.getDescription()`