Package org.apache.commons.vfs.provider
Class AbstractFileObject
java.lang.Object
org.apache.commons.vfs.provider.AbstractFileObject
- All Implemented Interfaces:
FileObject
- Direct Known Subclasses:
CompressedFileFileObject
,DelegateFileObject
,FtpFileObject
,HttpFileObject
,LocalFile
,RamFileObject
,SftpFileObject
,TarFileObject
,UrlFileObject
,ZipFileObject
A partial file object implementation.
- Version:
- $Revision: 484648 $ $Date: 2006-12-08 17:18:36 +0100 (Fri, 08 Dec 2006) $
- Author:
- Adam Murdoch, Gary D. Gregory
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionboolean
canRenameTo
(FileObject newfile) Queries the object if a simple rename to the filename ofnewfile
is possible.protected void
Deprecated.protected void
childrenChanged
(FileName childName, FileType newType) Notifies the file that its children have changed.void
close()
Closes this file, and its content.void
copyFrom
(FileObject file, FileSelector selector) Copies another file to this file.void
Creates this file, if it does not exist.void
Creates this folder, if it does not exist.boolean
delete()
Deletes this file.int
delete
(FileSelector selector) Deletes this file, and all children.protected void
doAttach()
Attaches this file object to its file resource.protected void
Creates this file as a folder.protected void
doDelete()
Deletes the file.protected void
doDetach()
Detaches this file object from its file resource.protected Map
Returns the attributes of this file.protected Certificate[]
Returns the certificates used to sign this file.protected abstract long
Returns the size of the file content (in bytes).protected abstract InputStream
Creates an input stream to read the file content from.protected long
Returns the last modified time of this file.protected OutputStream
doGetOutputStream
(boolean bAppend) Creates an output stream to write the file content to.protected RandomAccessContent
Creates access to the file for random i/o.protected abstract FileType
Determines the type of this file.protected boolean
Determines if this file is hidden.protected boolean
Determines if this file can be read.protected boolean
doIsSameFile
(FileObject destFile) Checks if this fileObject is the same file asdestFile
just with a different name.
E.g.protected boolean
Determines if this file can be written to.protected abstract String[]
Lists the children of this file.protected FileObject[]
Lists the children of this file.protected void
doRename
(FileObject newfile) Renames the file.protected void
doSetAttribute
(String atttrName, Object value) Sets an attribute of this file.protected void
doSetLastModifiedTime
(long modtime) Sets the last modified time of this file.protected void
Called when the ouput stream for this file is closed.boolean
exists()
Determines if the file exists.protected void
finalize()
findFiles
(FileSelector selector) Finds the set of matching descendents of this file, in depthwise order.void
findFiles
(FileSelector selector, boolean depthwise, List selected) Traverses the descendents of this file, and builds a list of selected files.Returns a child of this file.Returns the children of the file.Returns the file's content.protected FileContentInfoFactory
create the filecontentinfo implementationReturns the file system this file belongs to.Returns an input stream to use to read the content of the file.getName()
Returns the name of the file.Prepares this file for writing.getOutputStream
(boolean bAppend) Prepares this file for writing.Returns the parent of the file.Returns an input/output stream to use to read and write the content of the file in and random manner.getType()
Returns the file's type.getURL()
Returns a URL representation of the file.protected void
Called when this file is changed.
This will only happen if you monitor the file usingFileMonitor
.protected void
handleCreate
(FileType newType) Called when this file is created.protected void
Called when this file is deleted.void
holdObject
(Object strongRef) This method is meant to add a object where this object holds a strong reference then.protected void
injectType
(FileType fileType) boolean
Check if the internal state is "attached"boolean
Check if the content stream is openboolean
isHidden()
Determines if this file can be read.boolean
Determines if this file can be read.protected boolean
isSameFile
(FileObject destFile) Checks if this fileObject is the same file asdestFile
just with a different name.
E.g.boolean
Determines if this file can be written to.void
moveTo
(FileObject destFile) Moves (rename) the file to another oneprotected void
will be called after this file-object closed all its streams.protected void
onChange()
Called when the type or content of this file changes.protected void
onChildrenChanged
(FileName child, FileType newType) Called when the children of this file change.void
refresh()
This will prepare the fileObject to get resynchronized with the underlaying filesystem if requiredresolveFile
(String path) Finds a file, relative to this file.resolveFile
(String name, NameScope scope) Returns a child by name.toString()
Returns the URI of the file.
-
Constructor Details
-
AbstractFileObject
-
-
Method Details
-
doAttach
Attaches this file object to its file resource. This method is called before any of the doBlah() or onBlah() methods. Sub-classes can use this method to perform lazy initialisation. This implementation does nothing.- Throws:
Exception
-
doDetach
Detaches this file object from its file resource.Called when this file is closed. Note that the file object may be reused later, so should be able to be reattached.
This implementation does nothing.- Throws:
Exception
-
doGetType
Determines the type of this file. Must not return null. The return value of this method is cached, so the implementation can be expensive.- Throws:
Exception
-
doIsHidden
Determines if this file is hidden. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation always returns false.- Throws:
Exception
-
doIsReadable
Determines if this file can be read. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation always returns true.- Throws:
Exception
-
doIsWriteable
Determines if this file can be written to. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation always returns true.- Throws:
Exception
-
doListChildren
Lists the children of this file. Is only called ifdoGetType()
returnsFileType.FOLDER
. The return value of this method is cached, so the implementation can be expensive.- Throws:
Exception
-
doListChildrenResolved
Lists the children of this file. Is only called ifdoGetType()
returnsFileType.FOLDER
. The return value of this method is cached, so the implementation can be expensive.
Other thandoListChildren
you could return FileObject's to e.g. reinitialize the type of the file.
(Introduced for Webdav: "permission denied on resource" during getType())- Throws:
Exception
-
doDelete
Deletes the file. Is only called when:doGetType()
does not returnFileType.IMAGINARY
.doIsWriteable()
returns true.- This file has no children, if a folder.
- Throws:
Exception
-
doRename
Renames the file. Is only called when:doIsWriteable()
returns true.
- Throws:
Exception
-
doCreateFolder
Creates this file as a folder. Is only called when:doGetType()
returnsFileType.IMAGINARY
.- The parent folder exists and is writeable, or this file is the root of the file system.
- Throws:
Exception
-
onChildrenChanged
Called when the children of this file change. Allows subclasses to refresh any cached information about the children of this file. This implementation does nothing.- Throws:
Exception
-
onChange
Called when the type or content of this file changes. This implementation does nothing.- Throws:
Exception
-
doGetLastModifiedTime
Returns the last modified time of this file. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation throws an exception.- Throws:
Exception
-
doSetLastModifiedTime
Sets the last modified time of this file. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation throws an exception.- Throws:
Exception
-
doGetAttributes
Returns the attributes of this file. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation always returns an empty map.- Throws:
Exception
-
doSetAttribute
Sets an attribute of this file. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation throws an exception.- Throws:
Exception
-
doGetCertificates
Returns the certificates used to sign this file. Is only called ifdoGetType()
does not returnFileType.IMAGINARY
. This implementation always returns null.- Throws:
Exception
-
doGetContentSize
Returns the size of the file content (in bytes). Is only called ifdoGetType()
returnsFileType.FILE
.- Throws:
Exception
-
doGetInputStream
Creates an input stream to read the file content from. Is only called ifdoGetType()
returnsFileType.FILE
.It is guaranteed that there are no open output streams for this file when this method is called.
The returned stream does not have to be buffered.
- Throws:
Exception
-
doGetRandomAccessContent
Creates access to the file for random i/o. Is only called ifdoGetType()
returnsFileType.FILE
.It is guaranteed that there are no open output streams for this file when this method is called.
- Throws:
Exception
-
doGetOutputStream
Creates an output stream to write the file content to. Is only called if:doIsWriteable()
returns true.doGetType()
returnsFileType.FILE
, ordoGetType()
returnsFileType.IMAGINARY
, and the file's parent exists and is a folder.
It is guaranteed that there are no open stream (input or output) for this file when this method is called.
The returned stream does not have to be buffered.
This implementation throws an exception.- Throws:
Exception
-
toString
Returns the URI of the file. -
getName
Returns the name of the file.- Specified by:
getName
in interfaceFileObject
-
getFileSystem
Returns the file system this file belongs to.- Specified by:
getFileSystem
in interfaceFileObject
- Returns:
- The file system.
-
getURL
Returns a URL representation of the file.- Specified by:
getURL
in interfaceFileObject
- Throws:
FileSystemException
-
exists
Determines if the file exists.- Specified by:
exists
in interfaceFileObject
- Returns:
true
if this file exists,false
if not.- Throws:
FileSystemException
- On error determining if this file exists.
-
getType
Returns the file's type.- Specified by:
getType
in interfaceFileObject
- Returns:
- One of the
FileType
constants. Never returns null. - Throws:
FileSystemException
- On error determining the file's type.
-
isHidden
Determines if this file can be read.- Specified by:
isHidden
in interfaceFileObject
- Returns:
true
if this file is hidden,false
if not.- Throws:
FileSystemException
- On error determining if this file exists.
-
isReadable
Determines if this file can be read.- Specified by:
isReadable
in interfaceFileObject
- Returns:
true
if this file is readable,false
if not.- Throws:
FileSystemException
- On error determining if this file exists.
-
isWriteable
Determines if this file can be written to.- Specified by:
isWriteable
in interfaceFileObject
- Returns:
true
if this file is writeable,false
if not.- Throws:
FileSystemException
- On error determining if this file exists.
-
getParent
Returns the parent of the file.- Specified by:
getParent
in interfaceFileObject
- Returns:
- The folder that contains this file. Returns null if this file is the root of a file system.
- Throws:
FileSystemException
- On error finding the file's parent.
-
getChildren
Returns the children of the file.- Specified by:
getChildren
in interfaceFileObject
- Returns:
- An array containing the children of this file. The array is unordered. If the file does not have any children, a zero-length array is returned. This method never returns null.
- Throws:
FileSystemException
- If this file does not exist, or is not a folder, or on error listing this file's children.
-
getChild
Returns a child of this file.- Specified by:
getChild
in interfaceFileObject
- Parameters:
name
- The name of the child.- Returns:
- The child, or null if there is no such child.
- Throws:
FileSystemException
- If this file does not exist, or is not a folder, or on error determining this file's children.
-
resolveFile
Returns a child by name.- Specified by:
resolveFile
in interfaceFileObject
- Parameters:
name
- The name to resolve.- Returns:
- The file.
- Throws:
FileSystemException
- On error parsing the path, or on error finding the file.
-
resolveFile
Finds a file, relative to this file.- Specified by:
resolveFile
in interfaceFileObject
- Parameters:
path
- The path of the file to locate. Can either be a relative path, which is resolved relative to this file, or an absolute path, which is resolved relative to the file system that contains this file.- Returns:
- The file.
- Throws:
FileSystemException
- On error parsing the path, or on error finding the file.
-
delete
Deletes this file.- Specified by:
delete
in interfaceFileObject
- Returns:
- true if this object has been deleted
- Throws:
FileSystemException
- If this file is a non-empty folder, or if this file is read-only, or on error deleteing this file.
-
delete
Deletes this file, and all children.- Specified by:
delete
in interfaceFileObject
- Parameters:
selector
- The selector to use to select which files to delete.- Returns:
- the number of deleted files
- Throws:
FileSystemException
- If this file or one of its descendents is read-only, or on error deleting this file or one of its descendents.
-
createFile
Creates this file, if it does not exist.- Specified by:
createFile
in interfaceFileObject
- Throws:
FileSystemException
- If the file already exists with the wrong type, or the parent folder is read-only, or on error creating this file or one of its ancestors.
-
createFolder
Creates this folder, if it does not exist. Also creates any ancestor files which do not exist.- Specified by:
createFolder
in interfaceFileObject
- Throws:
FileSystemException
- If the folder already exists with the wrong type, or the parent folder is read-only, or on error creating this folder or one of its ancestors.
-
copyFrom
Copies another file to this file.- Specified by:
copyFrom
in interfaceFileObject
- Parameters:
file
- The source file to copy.selector
- The selector to use to select which files to copy.- Throws:
FileSystemException
- If this file is read-only, or if the source file does not exist, or on error copying the file.
-
moveTo
Moves (rename) the file to another one- Specified by:
moveTo
in interfaceFileObject
- Parameters:
destFile
- the New filename.- Throws:
FileSystemException
- If this file is read-only, or if the source file does not exist, or on error copying the file.
-
isSameFile
Checks if this fileObject is the same file asdestFile
just with a different name.
E.g. for case insensitive filesystems like windows.- Throws:
FileSystemException
-
doIsSameFile
Checks if this fileObject is the same file asdestFile
just with a different name.
E.g. for case insensitive filesystems like windows.- Throws:
FileSystemException
-
canRenameTo
Queries the object if a simple rename to the filename ofnewfile
is possible.- Specified by:
canRenameTo
in interfaceFileObject
- Parameters:
newfile
- the new filename- Returns:
- true if rename is possible
-
findFiles
Finds the set of matching descendents of this file, in depthwise order.- Specified by:
findFiles
in interfaceFileObject
- Parameters:
selector
- The selector to use to select matching files.- Returns:
- list of files or null if the base file (this object) do not exist
- Throws:
FileSystemException
-
getContent
Returns the file's content.- Specified by:
getContent
in interfaceFileObject
- Returns:
- This file's content.
- Throws:
FileSystemException
- On error getting this file's content.
-
refresh
This will prepare the fileObject to get resynchronized with the underlaying filesystem if required- Specified by:
refresh
in interfaceFileObject
- Throws:
FileSystemException
-
close
Closes this file, and its content.- Specified by:
close
in interfaceFileObject
- Throws:
FileSystemException
- On error closing the file.- See Also:
-
getInputStream
Returns an input stream to use to read the content of the file.- Throws:
FileSystemException
-
getRandomAccessContent
Returns an input/output stream to use to read and write the content of the file in and random manner.- Throws:
FileSystemException
-
getOutputStream
Prepares this file for writing. Makes sure it is either a file, or its parent folder exists. Returns an output stream to use to write the content of the file to.- Throws:
FileSystemException
-
getOutputStream
Prepares this file for writing. Makes sure it is either a file, or its parent folder exists. Returns an output stream to use to write the content of the file to.- Parameters:
bAppend
- true when append to the file.
Note: If the underlaying filesystem do not support this, it wont work.- Throws:
FileSystemException
-
endOutput
Called when the ouput stream for this file is closed.- Throws:
Exception
-
handleCreate
Called when this file is created. Updates cached info and notifies the parent and file system.- Throws:
Exception
-
handleDelete
Called when this file is deleted. Updates cached info and notifies subclasses, parent and file system.- Throws:
Exception
-
handleChanged
Called when this file is changed.
This will only happen if you monitor the file usingFileMonitor
.- Throws:
Exception
-
childrenChanged
Deprecated.Notifies the file that its children have changed.- Throws:
Exception
-
childrenChanged
Notifies the file that its children have changed.- Throws:
Exception
-
findFiles
public void findFiles(FileSelector selector, boolean depthwise, List selected) throws FileSystemException Traverses the descendents of this file, and builds a list of selected files.- Specified by:
findFiles
in interfaceFileObject
- Parameters:
selector
- the selector used to determine if the file should be selecteddepthwise
- controls the ordering in the list. e.g. deepest firstselected
- container for selected files. list needs not to be empty.- Throws:
FileSystemException
-
isContentOpen
public boolean isContentOpen()Check if the content stream is open- Specified by:
isContentOpen
in interfaceFileObject
- Returns:
- true if this is the case
-
isAttached
public boolean isAttached()Check if the internal state is "attached"- Specified by:
isAttached
in interfaceFileObject
- Returns:
- true if this is the case
-
getFileContentInfoFactory
create the filecontentinfo implementation -
injectType
-
holdObject
This method is meant to add a object where this object holds a strong reference then. E.g. a archive-filesystem creates a list of all childs and they shouldnt get garbage collected until the container is garbage collected- Parameters:
strongRef
-
-
notifyAllStreamsClosed
protected void notifyAllStreamsClosed()will be called after this file-object closed all its streams. -
getFileOperations
- Specified by:
getFileOperations
in interfaceFileObject
- Returns:
- FileOperations interface that provides access to the operations API.
- Throws:
FileSystemException
-
finalize
-
childrenChanged(FileName,FileType)