Class FileSystemResource
- java.lang.Object
- org.springframework.core.io.AbstractResource
- org.springframework.core.io.FileSystemResource
- All Implemented Interfaces:
InputStreamSource
,Resource
,WritableResource
public class FileSystemResource extends AbstractResource implements WritableResource
Resource
implementation forjava.io.File
andjava.nio.file.Path
handles with a file system target. Supports resolution as aFile
and also as aURL
. Implements the extendedWritableResource
interface.Note: As of Spring Framework 5.0, this
Resource
implementation uses NIO.2 API for read/write interactions. As of 5.1, it may be constructed with aPath
handle in which case it will perform all file system interactions via NIO.2, only resorting toFile
ongetFile()
.- Since:
- 28.12.2003
- Author:
- Juergen Hoeller
- See Also:
FileSystemResource(String)
,FileSystemResource(File)
,FileSystemResource(Path)
,File
,Files
Constructor Summary
Constructors Constructor Description FileSystemResource(File file)
Create a newFileSystemResource
from aFile
handle.FileSystemResource(String path)
Create a newFileSystemResource
from a file path.FileSystemResource(FileSystem fileSystem, String path)
Create a newFileSystemResource
from aFileSystem
handle, locating the specified path.FileSystemResource(Path filePath)
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description long
contentLength()
This implementation returns the underlying File/Path length.Resource
createRelative(String relativePath)
This implementation creates a FileSystemResource, 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 File references.boolean
exists()
This implementation returns whether the underlying file exists.String
getDescription()
This implementation returns a description that includes the absolute path of the file.File
getFile()
This implementation returns the underlying File reference.String
getFilename()
This implementation returns the name of the file.InputStream
getInputStream()
This implementation opens a NIO file stream for the underlying file.OutputStream
getOutputStream()
This implementation opens a FileOutputStream for the underlying file.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 File 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/Path last-modified time.ReadableByteChannel
readableChannel()
This implementation opens a FileChannel for the underlying file.WritableByteChannel
writableChannel()
This implementation opens a FileChannel for the underlying file.Methods inherited from class org.springframework.core.io.AbstractResource
getFileForLastModifiedCheck, isOpen, toString
Constructor Detail
FileSystemResource
public FileSystemResource(String path)
Create a newFileSystemResource
from a file path.Note: When building relative resources via
createRelative(java.lang.String)
, it makes a difference whether the specified resource base path here ends with a slash or not. In the case of "C:/dir1/", relative paths will be built underneath that root: e.g. relative path "dir2" -> "C:/dir1/dir2". In the case of "C:/dir1", relative paths will apply at the same directory level: relative path "dir2" -> "C:/dir2".- Parameters:
path
- a file path- See Also:
FileSystemResource(Path)
FileSystemResource
public FileSystemResource(File file)
Create a newFileSystemResource
from aFile
handle.Note: When building relative resources via
createRelative(java.lang.String)
, the relative path will apply at the same directory level: e.g. new File("C:/dir1"), relative path "dir2" -> "C:/dir2"! If you prefer to have relative paths built underneath the given root directory, use theconstructor with a file path
to append a trailing slash to the root path: "C:/dir1/", which indicates this directory as root for all relative paths.- Parameters:
file
- a File handle- See Also:
FileSystemResource(Path)
,getFile()
FileSystemResource
public FileSystemResource(Path filePath)
Create a newFileSystemResource
from aPath
handle, performing all file system interactions via NIO.2 instead ofFile
.In contrast to
PathResource
, this variant strictly follows the generalFileSystemResource
conventions, in particular in terms of path cleaning andcreateRelative(String)
handling.Note: When building relative resources via
createRelative(java.lang.String)
, the relative path will apply at the same directory level: e.g. Paths.get("C:/dir1"), relative path "dir2" -> "C:/dir2"! If you prefer to have relative paths built underneath the given root directory, use theconstructor with a file path
to append a trailing slash to the root path: "C:/dir1/", which indicates this directory as root for all relative paths. Alternatively, consider usingPathResource(Path)
forjava.nio.path.Path
resolution increateRelative
, always nesting relative paths.- Parameters:
filePath
- a Path handle to a file- Since:
- 5.1
- See Also:
FileSystemResource(File)
FileSystemResource
public FileSystemResource(FileSystem fileSystem, String path)
Create a newFileSystemResource
from aFileSystem
handle, locating the specified path.This is an alternative to
FileSystemResource(String)
, performing all file system interactions via NIO.2 instead ofFile
.- Parameters:
fileSystem
- the FileSystem to locate the path withinpath
- a file path- Since:
- 5.1.1
- See Also:
FileSystemResource(File)
Method Detail
exists
public boolean exists()
This implementation returns whether the underlying file exists.- Specified by:
exists
in interfaceResource
- Overrides:
exists
in classAbstractResource
- See Also:
File.exists()
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 interfaceResource
- Overrides:
isReadable
in classAbstractResource
- See Also:
File.canRead()
,File.isDirectory()
getInputStream
public InputStream getInputStream() throws IOException
This implementation opens a NIO file stream for the underlying file.- Specified by:
getInputStream
in interfaceInputStreamSource
- Returns:
- the input stream for the underlying resource (must not be
null
) - Throws:
FileNotFoundException
- if the underlying resource doesn't existIOException
- if the content stream could not be opened- See Also:
FileInputStream
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 interfaceWritableResource
- See Also:
File.canWrite()
,File.isDirectory()
getOutputStream
public OutputStream getOutputStream() throws IOException
This implementation opens a FileOutputStream for the underlying file.- Specified by:
getOutputStream
in interfaceWritableResource
- Throws:
IOException
- if the stream could not be opened- See Also:
FileOutputStream
getURL
public URL getURL() throws IOException
This implementation returns a URL for the underlying file.- Specified by:
getURL
in interfaceResource
- Overrides:
getURL
in classAbstractResource
- Throws:
IOException
- if the resource cannot be resolved as URL, i.e. if the resource is not available as descriptor- See Also:
File.toURI()
getURI
public URI getURI() throws IOException
This implementation returns a URI for the underlying file.- Specified by:
getURI
in interfaceResource
- Overrides:
getURI
in classAbstractResource
- Throws:
IOException
- if the resource cannot be resolved as URI, i.e. if the resource is not available as descriptor- See Also:
File.toURI()
isFile
public boolean isFile()
This implementation always indicates a file.- Specified by:
isFile
in interfaceResource
- Overrides:
isFile
in classAbstractResource
- See Also:
Resource.getFile()
getFile
public File getFile()
This implementation returns the underlying File reference.- Specified by:
getFile
in interfaceResource
- Overrides:
getFile
in classAbstractResource
- See Also:
InputStreamSource.getInputStream()
readableChannel
public ReadableByteChannel readableChannel() throws IOException
This implementation opens a FileChannel for the underlying file.- Specified by:
readableChannel
in interfaceResource
- Overrides:
readableChannel
in classAbstractResource
- Returns:
- the byte channel for the underlying resource (must not be
null
) - Throws:
FileNotFoundException
- if the underlying resource doesn't existIOException
- if the content channel could not be opened- See Also:
FileChannel
writableChannel
public WritableByteChannel writableChannel() throws IOException
This implementation opens a FileChannel for the underlying file.- Specified by:
writableChannel
in interfaceWritableResource
- Returns:
- the byte channel for the underlying resource (must not be
null
) - Throws:
FileNotFoundException
- if the underlying resource doesn't existIOException
- if the content channel could not be opened- See Also:
FileChannel
contentLength
public long contentLength() throws IOException
This implementation returns the underlying File/Path length.- Specified by:
contentLength
in interfaceResource
- Overrides:
contentLength
in classAbstractResource
- 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/Path last-modified time.- Specified by:
lastModified
in interfaceResource
- Overrides:
lastModified
in classAbstractResource
- Throws:
IOException
- if the resource cannot be resolved (in the file system or as some other known physical resource type)- See Also:
AbstractResource.getFileForLastModifiedCheck()
createRelative
public Resource createRelative(String relativePath)
This implementation creates a FileSystemResource, applying the given path relative to the path of the underlying file of this resource descriptor.- Specified by:
createRelative
in interfaceResource
- Overrides:
createRelative
in classAbstractResource
- Parameters:
relativePath
- the relative path (relative to this resource)- Returns:
- the resource handle for the relative resource
- See Also:
StringUtils.applyRelativePath(String, String)
getFilename
public String getFilename()
This implementation returns the name of the file.- Specified by:
getFilename
in interfaceResource
- Overrides:
getFilename
in classAbstractResource
- See Also:
File.getName()
getDescription
public String getDescription()
This implementation returns a description that includes the absolute path of the file.- Specified by:
getDescription
in interfaceResource
- See Also:
File.getAbsolutePath()
equals
public boolean equals(@Nullable Object other)
This implementation compares the underlying File references.- Overrides:
equals
in classAbstractResource
- See Also:
Resource.getDescription()
hashCode
public int hashCode()
This implementation returns the hash code of the underlying File reference.- Overrides:
hashCode
in classAbstractResource
- See Also:
Resource.getDescription()