The XFileAccessor interface is implemented by filesystems that
need to be accessed via the XFile API.
Classes that implement this interface must be associated
with a URL scheme that is structured according to the
Common Internet Scheme syntax described in
RFC 1738;
an optional location part followed by a hierarchical set
of slash separated directories.
A class file that implements this interface must be named
"XFileAccessor" and be installed in a directory named after
the URL scheme that it implements, for instance, an XFileAccessor
that provides file access through the HTTP protocol would be
associated with the "http" URL and its class file would be
called:
http.XFileAccessor
A class prefix is added to this name. The default prefix is
com.sun
and this composite name is located by the
classLoader via the CLASSPATH.
For instance, Sun's "nfs" XFileAccessor is installed as:
com.sun.nfs.XFileAccessor
The default class prefix
com.sun
can be changed by
setting the System property
java.protocol.xfile
to any desired prefix or a list of prefixes separated by
vertical bars. Each prefix in the list will be used to
construct a package name and the classLoader will attempt
to load that package via the CLASSPATH. This process will
continue until the XFileAccessor is successfully loaded.
For instance, if you want to use the "ftp"
XFileAccessor from Acme, Inc and the "nfs" XFileAccessor
from "ABC Inc." then you can set the system property as
follows:
java.protocol.xfile=com.acme|com.abc
When an "ftp" URL is used, the following package names will
be constructed:
com.acme.ftp.XFileAccessor
com.abc.ftp.XFileAccessor
com.sun.ftp.XFileAccessor
(the default "com.sun" prefix is automatically added to
the end of the property list)
The class loader attempts to load each of the constructed
package names in turn relative to the CLASSPATH until it is
successful.
A subsequent reference to an "nfs" URL will result in
the following list of candidate package names:
com.acme.nfs.XFileAccessor
com.abc.nfs.XFileAccessor
com.sun.nfs.XFileAccessor
In this case the "nfs" XFileAccessor from ABC, Inc. will
be loaded in preference to Sun's NFS.
canRead
public boolean canRead()
Tests if the application can read from the specified file.
true
if the file specified by this
object exists and the application can read the file;
false
otherwise.
canWrite
public boolean canWrite()
Tests if the application can write to this file.
true
if the application is allowed to
write to a file whose name is specified by this
object; false
otherwise.
close
public void close()
throws IOException
Close the file.
Closes this file and releases any system resources
associated with the file.
After the file is closed further I/O operations may
throw IOException.
delete
public boolean delete()
Deletes the file specified by this object. If the target
file to be deleted is a directory, it must be empty for deletion
to succeed.
true
if the file is successfully deleted;
false
otherwise.
exists
public boolean exists()
Tests if this XFile object exists.
true
if the file specified by this object
exists; false
otherwise.
flush
public void flush()
throws IOException
Forces any buffered output bytes to be written out.
getXFile
public XFile getXFile()
Return the XFile for this Accessor
isDirectory
public boolean isDirectory()
Tests if the file represented by this XFileAccessor
object is a directory.
true
if this XFileAccessor object
exists and is a directory; false
otherwise.
isFile
public boolean isFile()
Tests if the file represented by this
object is a "normal" file.
A file is "normal" if it is not a directory and, in
addition, satisfies other system-dependent criteria. Any
non-directory file created by a Java application is
guaranteed to be a normal file.
true
if the file specified by this
object exists and is a "normal"
file; false
otherwise.
lastModified
public long lastModified()
Returns the time that the file represented by this
XFile
object was last modified.
It is measured as the time in milliseconds since
midnight, January 1, 1970 UTC.
- the time the file specified by this object was last
modified, or
0L
if the specified file
does not exist.
length
public long length()
Returns the length of the file represented by this
XFileAccessor object.
- the length, in bytes, of the file specified by
this object, or
0L
if the specified
file does not exist.
list
public String[] list()
Returns a list of the files in the directory specified by
this XFileAccessor object.
- an array of file names in the specified directory.
This list does not include the current directory or
the parent directory ("
.
" and
"..
" on Unix systems).
mkdir
public boolean mkdir()
Creates a directory whose pathname is specified by this
XFileAccessor object.
true
if the directory could be created;
false
otherwise.
mkfile
public boolean mkfile()
Creates an empty file whose pathname is specified by this
XFileAccessor object.
true
if the file was created;
false
otherwise.
open
public boolean open(XFile xf,
boolean serial,
boolean readOnly)
Open a file in this filesystem.
This method is called before any other method.
It may be used to open the real file.
xf
- The XFile for the file to be accessed
The URL will be of the form
<proto>://<location>/<path>
where <proto> is the name of the filesystem,
e.g. "nfs" and <location> is the location of
the filesystem. For nfs this is the network name of
a server. The <path> is a pathname that locates
the file within <location>. As required by
RFC 1738, the component delimiters in the pathname
are as for URL syntax: forward slashes only.serial
- true if serial access; false if random accessreadOnly
- true if read only; false if read/write
read
public int read(b[] ,
int off,
int len,
long foff)
throws IOException
Reads a subarray as a sequence of bytes.
off
- the start offset in the data bufferlen
- the maximum number of bytes to be readfoff
- the offset into the file
- number of bytes read - zero if none.
renameTo
public boolean renameTo(XFile dest)
Renames the file specified by this XFileAccessor object to
have the pathname given by the XFileAccessor object argument.
The destination XFile object will be of the same URL
scheme as this object. The change of name must not
affect the existence or accessibility of this object.
true
if the renaming succeeds;
false
otherwise.
write
public void write(b[] ,
int off,
int len,
long foff)
throws IOException
Writes a sub array as a sequence of bytes.
off
- the start offset in the data in the bufferlen
- the number of bytes that are writtenfoff
- the offset into the file