@DefaultAnnotation(value=edu.umd.cs.findbugs.annotations.NonNull.class) @Immutable public final class TFile extends File
File which provides transparent
read/write access to archive files and their entries as if they were
(virtual) directories and files.
Because this class actually extends the class File it can get used
polymorphically with the class FileSystemView or any other class
which depends on the class File.
This class provides some convenient methods which use pooled buffers and pooled threads in order to achieve superior performance as compared to the naive read-then-write-in-a-loop approach. These bulk I/O methods fall into the following categories:
cp(_p|_r|_rp)? methods copy files or directory trees.
The method names have been modeled after the Unix command line utility
cp with its options.
mv methods move files or directory trees.
The method names have been modeled after the Unix command line utility
mv.
rm(_r)? methods remove files or directory trees.
The method names have been modeled after the Unix command line utility
rm with its options.
input|output methods copy the given streams to this file or
vice versa.
In contrast to the previous methods they never close their argument
streams, so applications can call them multiple times on the same
streams to concatenate data.
cat(InputStream, OutputStream)
method is the core copy engine for all these methods.
It performs the data transfer from an input stream to an output stream.
When used with unbuffered input and output stream
implementations, it delivers the same performance as the transfer
method in the package java.nio.
Its name is modeled after the Unix command line utility cat.
If data is copied from an archive file to another archive file of the same type, some of the copy methods support a feature called Direct Data Copying (DDC) to achieve best performance: DDC copies the raw data from the source archive entry to the destination archive entry without the need to temporarily reproduce, copy and process the original data again.
The benefits of this feature are archive driver specific:
In case of ZIP compatible files with compressed entries, this avoids the
need to inflate the data from the source entry just to deflate it again for
the destination entry.
In case of TAR compatible files, it avoids the need to create an
additional temporary file, but shows no impact otherwise because the TAR
file format doesn't support compression.
Traversing Directory Trees
When traversing directory trees using different instances of this class,
it's important that they use TArchiveDetectors which recognize the
same set of archive files, i.e. their TArchiveDetector.toString()
method compares equal.
This is required in order to make sure that the cached data structures
in the TrueZIP Kernel do not get bypassed.
Otherwise, archive files may loose data or even get corrupted!
When copying or moving a directory tree, if you need a verbatim copy of any
archive files within this directory tree, then make sure that any cached
data structures in the TrueZIP Kernel are purged by calling umount()
before calling one of the methods which accept the additional parameter
TArchiveDetector.NULL for the traversal of this directory tree.
For example, to make a recursive archive copy, call
TFile src = ...
TFile dst = ...
TFile.umount(); // commit changes and purge any cached data
TFile.cp_rp(src, dst, TArchiveDetector.NULL, TArchiveDetector.NULL);
Whenever an archive file suffix is detected in a path, this class treats the corresponding file or directory as a prospective archive file. The word "prospective" suggests that just because a file is named archive.zip it isn't necessarily a valid ZIP file. In fact, it could be anything, even a plain directory in the platform file system!
Such an invalid archive file is called a false positive archive file. TrueZIP correctly identifies all types of false positive archive files by performing a recursive look up operation for the first parent file system where the respective prospective archive file actually exists and treats it according to its true state.
The following table shows how certain methods in this class behave, depending upon an archive file's path and its true state in the first parent file system where it actually exists.
| Path | True State | isArchive()1 |
isDirectory() |
isFile() |
exists() |
length()2 |
|---|---|---|---|---|---|---|
| archive.zip3 | Valid ZIP file | true |
true |
false |
true |
0 |
| archive.zip | False positive: Plain directory | true |
true |
false |
true |
? |
| archive.zip | False positive: Plain file | true |
false |
true |
true |
? |
| archive.zip | False positive: Regular special file | true |
false |
false |
true |
? |
| archive.zip | TFile or directory does not exist | true |
false |
false |
false |
0 |
| archive.tzp4 | Valid RAES encrypted ZIP file with valid key (e.g. password) | true |
true |
false |
true |
0 |
| archive.tzp | Valid RAES encrypted ZIP file with unknown key5 | true |
false |
false |
true |
? |
| archive.tzp | False positive: Plain directory | true |
true |
false |
true |
? |
| archive.tzp | False positive: Plain file | true |
false |
true |
true |
? |
| archive.tzp | False positive: Regular special file | true |
false |
false |
true |
? |
| archive.tzp | TFile or directory does not exist | true |
false |
false |
false |
0 |
| other | Plain directory | false |
true |
false |
true |
? |
| other | Plain file | false |
false |
true |
true |
? |
| other | Regular special file | false |
false |
false |
true |
? |
| other | TFile or directory does not exist | false |
false |
false |
false |
0 |
isArchive() doesn't check the true state of the file - it just
looks at its path: If the path ends with a configured archive file
suffix, isArchive() always returns true.
length() always returns 0 if the path denotes a
valid archive file.
Otherwise, the return value of length() depends on the
platform file system, which is indicated by ?.
For regular directories on Windows/NTFS for example, the return value
would be 0.
isDirectory() and isFile()
return false, while exists() returns true.| Modifier and Type | Field and Description |
|---|---|
private FsController<?> |
controller
This refers to the file system controller if and only if this file
refers to a prospective archive file, otherwise it's
null. |
private static File |
CURRENT_DIRECTORY |
private File |
delegate
The delegate is used to implement the behaviour of the file system
operations in case this instance represents neither an archive file
nor an entry in an archive file.
|
private TArchiveDetector |
detector |
private TFile |
enclArchive |
private FsEntryName |
enclEntryName |
private TFile |
innerArchive |
private static Set<File> |
ROOTS
The file system roots.
|
private static long |
serialVersionUID |
private static String |
UNC_PREFIX
The prefix of a UNC (a Windows concept).
|
pathSeparator, pathSeparatorChar, separator, separatorChar| Modifier | Constructor and Description |
|---|---|
|
TFile(File file)
Copy constructor.
|
|
TFile(File parent,
String member)
Equivalent to
new TFile(parent, child, null). |
|
TFile(File parent,
String member,
TArchiveDetector detector)
Constructs a new
TFile instance which may use the given archive
detector to scan the path name for prospective archive files. |
|
TFile(File file,
TArchiveDetector detector)
Constructs a new
TFile instance which may use the given archive
detector to scan the path name for prospective archive files. |
private |
TFile(File delegate,
TFile innerArchive,
TArchiveDetector detector) |
private |
TFile(FsMountPoint mountPoint,
TArchiveDetector detector) |
|
TFile(FsPath path)
Constructs a new
TFile instance from the given path. |
|
TFile(FsPath path,
TArchiveDetector detector)
Constructs a new
TFile instance for the given path and
detector. |
|
TFile(String path)
Equivalent to
new TFile(path, (TArchiveDetector) null). |
|
TFile(String parent,
String member)
Equivalent to
new TFile(parent, child, null). |
|
TFile(String parent,
String member,
TArchiveDetector detector)
Constructs a new
TFile instance which may use the given archive
detector to scan the entire path name for prospective archive
files. |
|
TFile(String path,
TArchiveDetector detector)
Constructs a new
TFile instance which may use the given
TArchiveDetector to scan its path name for prospective archive
files. |
|
TFile(URI uri)
Constructs a new
TFile instance from the given uri. |
| Modifier and Type | Method and Description |
|---|---|
boolean |
canExecute() |
boolean |
canRead() |
boolean |
canWrite() |
static void |
cat(InputStream in,
OutputStream out)
Copies the data from the given input stream to the given output stream
without closing them.
|
TFile |
compact()
Compacts this archive file by removing any redundant archive entry
contents and meta data, including central directories.
|
private static void |
compact(TFile grown) |
int |
compareTo(File other)
The implementation in the class
TFile delegates the call to its
decorated file object. |
boolean |
contains(File file)
Returns
true if and only if the path represented
by this instance contains the path represented by the given file,
where a path is said to contain another path if and only
if it's equal or an ancestor of the other path. |
static boolean |
contains(File a,
File b)
Returns
true if and only if the path represented
by a contains the path represented by b,
where a path is said to contain another path if and only
if it's equal or an ancestor of the other path. |
TFile |
cp_p(File dst)
Equivalent to
cp_p(this, dst). |
static void |
cp_p(File src,
File dst)
Copies the file
src to the file dst and attempts to
copy all attributes of the source file to the destination file, too. |
TFile |
cp_r(File dst)
Equivalent to
cp_r(this, dst, getArchiveDetector(), getArchiveDetector()). |
static void |
cp_r(File src,
File dst,
TArchiveDetector detector)
Equivalent to
cp_r(this, dst, detector, detector). |
static void |
cp_r(File src,
File dst,
TArchiveDetector srcDetector,
TArchiveDetector dstDetector)
Recursively copies the file or directory
src
to the file or directory dst. |
TFile |
cp_rp(File dst)
Equivalent to
cp_rp(this, dst, getArchiveDetector(), getArchiveDetector()). |
static void |
cp_rp(File src,
File dst,
TArchiveDetector detector)
Equivalent to
cp_rp(this, dst, detector, detector). |
static void |
cp_rp(File src,
File dst,
TArchiveDetector srcDetector,
TArchiveDetector dstDetector)
Recursively copies the file or directory
src to the file or
directory dst and attempts to copy all attributes of each
source file to the destination file, too. |
TFile |
cp(File dst)
Equivalent to
cp(this, dst). |
static void |
cp(File src,
File dst)
Copies the file
src to the file dst. |
static void |
cp(File src,
OutputStream out)
Copies the file
src to the output stream out and
closes the stream - even if an exception occurs. |
static void |
cp(InputStream in,
File dst)
Copies the input stream
in to the file dst and
closes the stream - even if an exception occurs. |
static void |
cp(InputStream in,
OutputStream out)
Copies the data from the input stream
in to the output stream
out and closes both streams - even if an exception occurs. |
boolean |
createNewFile()
Creates a new, empty file similar to its superclass implementation.
|
void |
deleteOnExit() |
boolean |
equals(Object that)
The implementation in the class
TFile delegates the call to its
decorated file. |
boolean |
exists()
This file system operation is virtually atomic.
|
private TFile[] |
filter(Collection<String> members,
FileFilter filter,
TArchiveDetector detector) |
private TFile[] |
filter(Collection<String> members,
FilenameFilter filter,
TArchiveDetector detector) |
private TFile[] |
filter(String[] members,
FilenameFilter filter,
TArchiveDetector detector) |
TFile |
getAbsoluteFile() |
String |
getAbsolutePath() |
TArchiveDetector |
getArchiveDetector()
Returns the
TArchiveDetector that was used to detect any archive
files in the path of this file object at construction time. |
TFile |
getCanonicalFile() |
String |
getCanonicalPath() |
TFile |
getCanOrAbsFile()
This convenience method simply returns the canonical form of this
abstract path or the normalized absolute form if resolving the
prior fails.
|
String |
getCanOrAbsPath()
This convenience method simply returns the canonical form of this
abstract path or the normalized absolute form if resolving the
prior fails.
|
Icon |
getClosedIcon()
If this file is a true archive file, its archive driver is asked to
return an icon to be displayed for this file.
|
(package private) FsController<?> |
getController()
Returns a file system controller if and only if the path denotes an
archive file, or
null otherwise. |
private FsController<?> |
getController(FsMountPoint mountPoint) |
static TArchiveDetector |
getDefaultArchiveDetector()
Equivalent to
TConfig.get().getArchiveDetector(). |
TFile |
getEnclArchive()
Returns the enclosing archive file object for this file object.
|
String |
getEnclEntryName()
Returns the entry name relative to the enclosing archive file.
|
(package private) FsEntryName |
getEnclFsEntryName() |
File |
getFile()
Returns the decorated file object.
|
TFile |
getInnerArchive()
Returns the innermost archive file object for this file object.
|
String |
getInnerEntryName()
Returns the entry name relative to the innermost archive file.
|
(package private) FsEntryName |
getInnerFsEntryName() |
String |
getName() |
TFile |
getNonArchivedParentFile()
Returns the first parent directory (starting from this file) which is
not an archive file or a file located in an archive file.
|
(package private) TFile |
getNonArchiveFile() |
TFile |
getNormalizedAbsoluteFile()
Similar to
getAbsoluteFile(), but removes any
"." and ".." directories from the path name wherever
possible. |
String |
getNormalizedAbsolutePath()
Similar to
getAbsolutePath(), but removes any redundant
"." and ".." directories from the path name. |
TFile |
getNormalizedFile()
Removes any redundant
"." and ".." directories from the
path name. |
String |
getNormalizedPath()
Removes any redundant
".", ".." directories from the
path name. |
Icon |
getOpenIcon()
If this file is a true archive file, its archive driver is asked to
return an icon to be displayed for this file.
|
String |
getParent() |
private static File |
getParent(File file) |
TFile |
getParentFile() |
String |
getPath() |
private FsScheme |
getScheme() |
private static String |
getSuffix(TFile file) |
TFile |
getTopLevelArchive()
Returns The top level archive file in the path or
null
if this file object does not name an archive file. |
int |
hashCode()
The implementation in the class
TFile delegates the call to its
decorated file. |
void |
input(InputStream in)
Copies the input stream
in to this file or entry in an archive
file
without closing it. |
private boolean |
invariants()
Checks the invariants of this class and throws an AssertionError if
any is violated even if assertion checking is disabled.
|
boolean |
isAbsolute() |
boolean |
isArchive()
Returns
true if and only if this TFile addresses an
archive file. |
boolean |
isDirectory()
Similar to its super class implementation, but returns
true for a valid archive file, too. |
boolean |
isEntry()
Returns
true if and only if this TPath addresses an
entry located within an archive file. |
boolean |
isFile()
Similar to its super class implementation, but returns
false for a valid archive file, too. |
boolean |
isFileSystemRoot()
Returns
true if and only if this file denotes a file system
root or a UNC (if running on the Windows platform). |
boolean |
isHidden() |
static boolean |
isLenient()
Equivalent to
TConfig.get().isLenient(). |
boolean |
isParentOf(File file)
Returns
true if and only if the path represented
by this instance is a direct or indirect parent of the path
represented by the given file. |
boolean |
isUNC()
Returns
true if and only if this file denotes a UNC. |
private static boolean |
isUNC(String path)
Returns
true if and only if this file denotes a UNC. |
long |
lastModified()
Returns a
long value representing the time this file was
last modified, measured in milliseconds since the epoch (00:00:00 GMT,
January 1, 1970), or 0L if the file does not exist or if an
I/O error occurs or if this is a ghost directory in an archive file. |
long |
length()
Returns the (uncompressed) length of the file.
|
String[] |
list()
Returns the names of the members in this directory in a newly
created array.
|
String[] |
list(FilenameFilter filter)
Returns the names of the members in this directory which are
accepted by
filenameFilter in a newly created array. |
TFile[] |
listFiles()
Equivalent to
listFiles((FilenameFilter) null, getArchiveDetector()). |
TFile[] |
listFiles(FileFilter filter)
Equivalent to
listFiles(fileFilter, getArchiveDetector()). |
TFile[] |
listFiles(FileFilter filter,
TArchiveDetector detector)
Returns
TFile objects for the members in this directory
which are accepted by fileFilter in a newly created array. |
TFile[] |
listFiles(FilenameFilter filter)
Equivalent to
listFiles(filenameFilter, getArchiveDetector()). |
TFile[] |
listFiles(FilenameFilter filter,
TArchiveDetector detector)
Returns
TFile objects for the members in this directory
which are accepted by filenameFilter in a newly created
array. |
TFile[] |
listFiles(TArchiveDetector detector)
Returns
TFile objects for the members in this directory
in a newly created array. |
boolean |
mkdir()
Creates a new, empty (virtual) directory similar to its superclass
implementation.
|
TFile |
mkdir(boolean recursive)
Ensures that a (virtual) directory with
this path name
exists in the (federated) file system. |
boolean |
mkdirs() |
private static boolean |
move(File src,
File dst) |
TFile |
mv(File dst)
Equivalent to
mv(this, dst, getArchiveDetector()). |
static void |
mv(File src,
File dst,
TArchiveDetector detector)
Moves the given source file or directory to the given destination file
or directory.
|
void |
output(OutputStream out)
Copies this file or entry in an archive file to the output stream
out
without closing it. |
private void |
parse(FsPath path,
TArchiveDetector detector) |
private void |
readObject(ObjectInputStream in) |
TFile |
rm_r()
Equivalent to
rm_r(this). |
static void |
rm_r(File node)
Recursively deletes the given file or directory tree.
|
TFile |
rm()
Equivalent to
rm(this). |
static void |
rm(File node)
Deletes the given file or directory.
|
private void |
scan(TFile ancestor)
Initialize this file object by scanning its path for archive
files, using the given
ancestor file (i.e. a direct or
indirect parent file) if any. |
private void |
scan(TFile ancestor,
TArchiveDetector detector,
int skip,
String path,
StringBuilder enclEntryNameBuf,
Paths.Splitter splitter) |
static void |
setDefaultArchiveDetector(TArchiveDetector detector)
Equivalent to
TConfig.get().setArchiveDetector(detector). |
boolean |
setLastModified(long time)
Sets the last modification of this file or (virtual) directory.
|
static void |
setLenient(boolean lenient)
Equivalent to
TConfig.get().setLenient(lenient). |
boolean |
setReadOnly()
Like the super class implementation, but is aware of archive
files in its path.
|
static void |
sync(BitField<FsSyncOption> options)
Commits all unsynchronized changes to the contents of all federated file
systems (i.e. prospective archive files) to their respective parent file
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
|
static void |
sync(TFile archive,
BitField<FsSyncOption> options)
Commits all unsynchronized changes to the contents of the federated file
system (i.e. prospective archive files) identified by
archive
and all its member federated file systems to their respective parent
file system, releases the associated resources (i.e. target archive
files) for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data. |
FsPath |
toFsPath()
Returns a file system path which is consistent with
toURI(). |
String |
toString() |
URI |
toURI()
In case no prospective archive file has been detected in the path name
at construction time, this method behaves like its super class
implementation.
|
URL |
toURL()
Deprecated.
|
static void |
umount()
Commits all unsynchronized changes to the contents of all federated file
systems (i.e. prospective archive files) to their respective parent file
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
|
static void |
umount(boolean forceCloseInputAndOutput)
Commits all unsynchronized changes to the contents of all federated file
systems (i.e. prospective archive files) to their respective parent file
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
|
static void |
umount(boolean waitCloseInput,
boolean forceCloseInput,
boolean waitCloseOutput,
boolean forceCloseOutput)
Commits all unsynchronized changes to the contents of all federated file
systems (i.e. prospective archive files) to their respective parent file
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
|
static void |
umount(TFile archive)
Commits all unsynchronized changes to the contents of the federated file
system (i.e. prospective archive files) identified by
archive
and all its member federated file systems to their respective parent
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data. |
static void |
umount(TFile archive,
boolean forceCloseInputAndOutput)
Commits all unsynchronized changes to the contents of the federated file
system (i.e. prospective archive files) identified by
archive
and all its member federated file systems to their respective parent
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data. |
static void |
umount(TFile archive,
boolean waitCloseInput,
boolean forceCloseInput,
boolean waitCloseOutput,
boolean forceCloseOutput)
Commits all unsynchronized changes to the contents of the federated file
system (i.e. prospective archive files) identified by
archive
and all its member federated file systems to their respective parent
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data. |
private void |
writeObject(ObjectOutputStream out) |
private Object |
writeReplace() |
createTempFile, createTempFile, delete, getFreeSpace, getTotalSpace, getUsableSpace, listRoots, renameTo, setExecutable, setExecutable, setReadable, setReadable, setWritable, setWritable, toPath@Nullable private transient volatile FsController<?> controller
null.
This field should be considered to be final!private static final File CURRENT_DIRECTORY
private transient File delegate
File
instance, then this field is initialized with that instance.
This enables federation of file system implementations and is essential
to enable the broken implementation in
JFileChooser to browse archive files.
private transient TArchiveDetector detector
@Nullable private transient TFile enclArchive
@Nullable private transient FsEntryName enclEntryName
@Nullable private transient TFile innerArchive
private static final long serialVersionUID
private static final String UNC_PREFIX
public TFile(File file)
new TFile(template, (TArchiveDetector) null).file - the file object to decorate.public TFile(@CheckForNull
File parent,
String member)
new TFile(parent, child, null).parent - the parent directory.
If this parameter is an instance of this class, its archive
detector is used to scan only the member path name
for prospective archive files.
Otherwise, the
default archive detector
is used to to scan the entire path name
for prospective archive files.member - a member path name.public TFile(@CheckForNull
File parent,
String member,
@CheckForNull
TArchiveDetector detector)
TFile instance which may use the given archive
detector to scan the path name for prospective archive files.
If parent is an instance of this class,
then detector is used to scan only the member path name
for prospective archive files.
If detector is null, then the
parent's archive detector
is used instead.
Otherwise, if parent is not an instance of this class,
then detector is used to scan the entire path name
for prospective archive files.
If detector is null, then the
default archive detector
is used instead.
parent - the parent directory.member - the member path name.detector - the archive detector to use for scanning the path name
for prospective archive files.public TFile(File file, @CheckForNull TArchiveDetector detector)
TFile instance which may use the given archive
detector to scan the path name for prospective archive files.file - the file object to decorate.
If this is an instance of this class, its fields are copied and
the detector parameter is ignored.detector - the archive detector to use for scanning the path name
for prospective archive files.
This parameter is ignored if and only if file is an
instance of this class.
Otherwise, if it's null, then the
default archive detector is
used instead.private TFile(File delegate, @CheckForNull TFile innerArchive, TArchiveDetector detector)
private TFile(FsMountPoint mountPoint, TArchiveDetector detector)
public TFile(FsPath path)
TFile instance from the given path.
This constructor is equivalent to
new TFile(path, TFile.getDefaultArchiveDetector())path - a path with an absolute
hierarchical URI which has a
scheme component which is known by the
default archive detector.IllegalArgumentException - if the
hierarchical URI of the given
path does not conform to the syntax constraints for
File.File(URI).toFsPath(),
TFile(URI)public TFile(FsPath path, TArchiveDetector detector)
TFile instance for the given path and
detector.
This constructor is a super set of the super class constructor
File.File(URI) with the following additional features:
If the given URI is opaque, it must match the pattern
<scheme>:<uri>!/<entry>.
The constructed file object then parses the URI to address an entry in
a federated file system (i.e. prospective archive file) with the name
<entry> in the prospective archive file addressed by
<uri> which is of the type identified by <scheme> .
This is recursively applied to access entries within other prospective
archive files until <uri> is a hierarchical URI.
The scheme component of this hierarchical URI must be file.
The constructed TFile instance uses the
default archive detector to look
up archive file system drivers for the named URI scheme components.
path - a path with an absolute
hierarchical URI which has a
scheme component which is known by the given detector.detector - the archive detector to look up archive file system
drivers for the named URI scheme components.IllegalArgumentException - if the
hierarchical URI of the given
path does not conform to the syntax constraints for
File.File(URI).toFsPath()public TFile(String path)
new TFile(path, (TArchiveDetector) null).
The default archive detector
is used to scan the path name for prospective archive files.
path - the path name.public TFile(@CheckForNull
String parent,
String member)
new TFile(parent, child, null).
The default archive detector
is used to scan the entire path name for prospective archive
files.
parent - the parent directory.member - the member path name.public TFile(@CheckForNull
String parent,
String member,
@CheckForNull
TArchiveDetector detector)
TFile instance which may use the given archive
detector to scan the entire path name for prospective archive
files.parent - the parent directory.member - the member path name.detector - the archive detector to use for scanning the path name
for prospective archive files.
If this is null, then the
default archive detector is
used instead.public TFile(String path, @CheckForNull TArchiveDetector detector)
TFile instance which may use the given
TArchiveDetector to scan its path name for prospective archive
files.path - the path name.detector - the archive detector to use for scanning the path name
for prospective archive files.
If this is null, then the
default archive detector is
used instead.public TFile(URI uri)
TFile instance from the given uri.
This constructor is equivalent to
new TFile(FsPath.create(uri, CANONICALIZE), TFile.getDefaultArchiveDetector()),uri - an absolute URI which has a scheme component which is
known by the
default archive detector.IllegalArgumentException - if the given URI does not conform to
the syntax constraints for FsPaths or
File.File(URI).toURI(),
TFile(FsPath)public boolean canExecute()
canExecute in class Filepublic static void cat(InputStream in, OutputStream out) throws IOException
cat because you could use it to concatenate the
contents of multiple streams.
This is a high performance implementation which uses a pooled background thread to fill a FIFO of data buffers which is concurrently flushed by the current thread. It performs best when used with unbuffered streams.
| Feature | Supported |
|---|---|
| Preserves file attributes | n/a |
| Copies directories recursively | n/a |
| Reads and overwrites special files | n/a |
| Closes parameter stream(s) | Never |
| Direct Data Copying (DDC) | n/a |
| Deletes partial written files on failure | n/a |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
in - the input stream.out - the output stream.IOException - if any I/O error occurs.cp(InputStream, OutputStream),
Bulk I/O Methodspublic TFile compact() throws IOException
archive file,
then this operation does nothing and returns immediately.
This operation is intended to compact archive files which have been
frequently updated with FsOutputOption.GROW or similar means.
If this output option preference is set and an archive file is updated
frequently, then over time a lot of redundant artifacts such as archive
entry contents and meta data, including central directories may be
physically present in the archive file, even if all its entries have
been deleted.
This operation could then get used to remove any redundant artifacts
again.
Mind that this operation has no means to detect if there is actually any redundant data present in this archive file. Any invocation will perform exactly the same steps, so if this archive file is already compact, then this will just waste time and temporary space in the platform file system.
Note that this operation is not thread-safe and hence not atomic, so you should not concurrently access this archive file or any of its entries!
This operation performs in the order of O(s), where s is the total size of the archive file either before (worst case) or after (best case) compacting it. If this archive file has already been mounted, then s is the total size of the archive file after compacting it (best case). Otherwise, the definition of s is specific to the archive file system driver. Usually, if the archive file contains a central directory, you could expect the best case, otherwise the worst case, but this information is given without warranty.
If this archive file has been successfully compacted, then it's left unmounted, so any subsequent operation will mount it again, which requires additional time.
IOException - On any I/O error.FsOutputOption.GROWprivate static void compact(TFile grown) throws IOException
IOExceptionpublic int compareTo(File other)
The implementation in the class TFile delegates the call to its
decorated file object.
This implies that only the hierarchicalized file system path
of this file instance is considered in the comparison.
E.g. new TFile(FsPath.create("zip:file:/archive!/entry")) and
new TFile(FsPath.create("tar:file:/archive!/entry")) would
compare equal because their hierarchicalized file system path is
"file:/archive/entry".
More formally, let a and b be two TFile objects.
Then if the expression
a.toFsPath().toHierarchicalUri().compareTo(b.toFsPath().toHierarchicalUri()) == 0
is true, the expression a.compareTo(b) == 0 is also true.
Note that this does not work vice versa:
E.g. on Windows, the expression
new TFile("file").compareTo(new TFile("FILE")) == 0 is true, but
new TFile("file").toFsPath().toHierarchicalUri().compareTo(new TFile("FILE").toFsPath().toHierarchicalUri()) == 0
is false because FsPath.equals(Object) is case sensitive.
compareTo in interface Comparable<File>compareTo in class Fileequals(Object)public boolean contains(File file)
true if and only if the path represented
by this instance contains the path represented by the given file,
where a path is said to contain another path if and only
if it's equal or an ancestor of the other path.
Note:
file - The file object for the path to test for being contained by
the path of this instance.true if and only if the path represented
by this instance contains the path represented by the given
fileNullPointerException - If the parameter is null.public static boolean contains(File a, File b)
true if and only if the path represented
by a contains the path represented by b,
where a path is said to contain another path if and only
if it's equal or an ancestor of the other path.
Note:
a - the file to test for containing b.b - the file to test for being contained by a.true if and only if the path represented
by a contains the path represented by b.NullPointerException - If any parameter is null.public TFile cp_p(File dst) throws IOException
cp_p(this, dst).dst - the destination file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.thisIOException - if any I/O error occurs.public static void cp_p(File src, File dst) throws IOException
src to the file dst and attempts to
copy all attributes of the source file to the destination file, too.
Which attributes are actually copied is specific to the source and
destination file system driver implementations, but the minimum
guarantee is to copy the last modification time.
For example, starting with TrueZIP 7.2, the last modification, last
access and creation times are copied if all of the following are true:
java.io.File), and
| Feature | Supported |
|---|---|
| Preserves file attributes | Best effort |
| Copies directories recursively | No |
| Reads and overwrites special files | Yes |
| Closes parameter stream(s) | n/a |
| Direct Data Copying (DDC) | Yes |
| Deletes partial written files on failure | Yes |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
src - the source file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.IOException - if any I/O error occurs.public TFile cp_r(File dst) throws IOException
cp_r(this, dst, getArchiveDetector(), getArchiveDetector()).dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.thisIOException - if any I/O error occurs.public static void cp_r(File src, File dst, TArchiveDetector detector) throws IOException
cp_r(this, dst, detector, detector).src - the source file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.detector - the archive detector to use for detecting any
archive files within the source and destination
directory tree.IOException - if any I/O error occurs.public static void cp_r(File src, File dst, TArchiveDetector srcDetector, TArchiveDetector dstDetector) throws IOException
src
to the file or directory dst.
| Feature | Supported |
|---|---|
| Preserves file attributes | None |
| Copies directories recursively | Yes |
| Reads and overwrites special files | No |
| Closes parameter stream(s) | n/a |
| Direct Data Copying (DDC) | Yes |
| Deletes partial written files on failure | Yes |
| Deletes partial written directories on failure | No |
| Atomic | No |
src - the source file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.srcDetector - the archive detector to use for detecting any
archive files within the source directory tree.dstDetector - the archive detector to use for detecting any
archive files within the destination directory tree.IOException - if any I/O error occurs.public TFile cp_rp(File dst) throws IOException
cp_rp(this, dst, getArchiveDetector(), getArchiveDetector()).dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.thisIOException - if any I/O error occurs.public static void cp_rp(File src, File dst, TArchiveDetector detector) throws IOException
cp_rp(this, dst, detector, detector).src - the source file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.detector - the archive detector to use for detecting any
archive files within the source and destination
directory tree.IOException - if any I/O error occurs.public static void cp_rp(File src, File dst, TArchiveDetector srcDetector, TArchiveDetector dstDetector) throws IOException
src to the file or
directory dst and attempts to copy all attributes of each
source file to the destination file, too.
Which attributes are actually copied is specific to the source and
destination file system driver implementations, but the minimum
guarantee is to copy the last modification time.
For example, starting with TrueZIP 7.2, the last modification, last
access and creation times are copied if all of the following are true:
java.io.File), and
| Feature | Supported |
|---|---|
| Preserves file attributes | Best effort |
| Copies directories recursively | Yes |
| Reads and overwrites special files | No |
| Closes parameter stream(s) | n/a |
| Direct Data Copying (DDC) | Yes |
| Deletes partial written files on failure | Yes |
| Deletes partial written directories on failure | No |
| Atomic | No |
src - the source file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.srcDetector - the archive detector to use for detecting any
archive files within the source directory tree.dstDetector - the archive detector to use for detecting any
archive files within the destination directory tree.IOException - if any I/O error occurs.public TFile cp(File dst) throws IOException
cp(this, dst).dst - the destination file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.thisIOException - if any I/O error occurs.public static void cp(File src, File dst) throws IOException
src to the file dst.
| Feature | Supported |
|---|---|
| Preserves file attributes | None |
| Copies directories recursively | No |
| Reads and overwrites special files | Yes |
| Closes parameter stream(s) | n/a |
| Direct Data Copying (DDC) | Yes |
| Deletes partial written files on failure | Yes |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
src - the source file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.IOException - if any I/O error occurs.public static void cp(File src, OutputStream out) throws IOException
src to the output stream out and
closes the stream - even if an exception occurs.
| Feature | Supported |
|---|---|
| Preserves file attributes | None |
| Copies directories recursively | No |
| Reads and overwrites special files | Yes |
| Closes parameter stream(s) | Always |
| Direct Data Copying (DDC) | No |
| Deletes partial written files on failure | n/a |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
src - the source file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.out - the output stream.IOException - if any I/O error occurs.public static void cp(InputStream in, File dst) throws IOException
in to the file dst and
closes the stream - even if an exception occurs.
| Feature | Supported |
|---|---|
| Preserves file attributes | None |
| Copies directories recursively | No |
| Reads and overwrites special files | Yes |
| Closes parameter stream(s) | Always |
| Direct Data Copying (DDC) | No |
| Deletes partial written files on failure | Yes |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
in - the input stream.dst - the destination file.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.IOException - if any I/O error occurs.public static void cp(InputStream in, OutputStream out) throws IOException
in to the output stream
out and closes both streams - even if an exception occurs.
This is a high performance implementation which uses a pooled background thread to fill a FIFO of pooled buffers which is concurrently flushed by the current thread. It performs best when used with unbuffered streams.
| Feature | Supported |
|---|---|
| Preserves file attributes | n/a |
| Copies directories recursively | n/a |
| Reads and overwrites special files | n/a |
| Closes parameter stream(s) | Always |
| Direct Data Copying (DDC) | n/a |
| Deletes partial written files on failure | n/a |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
in - the input stream.out - the output stream.IOException - if any I/O error occurs.cat(InputStream, OutputStream),
Bulk I/O Methodspublic boolean createNewFile()
throws IOException
This file system operation is virtually atomic.
createNewFile in class FileIOExceptionmkdir()public void deleteOnExit()
deleteOnExit in class Filepublic boolean equals(Object that)
The implementation in the class TFile delegates the call to its
decorated file.
This implies that only the hierarchicalized file system path
of this file instance is considered in the comparison.
E.g. new TFile(FsPath.create("zip:file:/archive!/entry")) and
new TFile(FsPath.create("tar:file:/archive!/entry")) would
compare equal because their hierarchicalized file system path is
"file:/archive/entry".
More formally, let a and b be two TFile objects.
Then if the expression
a.toFsPath().toHierarchicalUri().equals(b.toFsPath().toHierarchicalUri())
is true, the expression a.equals(b) is also true.
Note that this does not work vice versa:
E.g. on Windows, the expression
new TFile("file").equals(new TFile("FILE")) is true, but
new TFile("file").toFsPath().toHierarchicalUri().equals(new TFile("FILE").toFsPath().toHierarchicalUri())
is false because FsPath.equals(Object) is case sensitive.
equals in class FilehashCode(),
compareTo(File)public boolean exists()
exists in class File@Nullable private TFile[] filter(@CheckForNull Collection<String> members, @CheckForNull FileFilter filter, TArchiveDetector detector)
@Nullable private TFile[] filter(@CheckForNull Collection<String> members, @CheckForNull FilenameFilter filter, TArchiveDetector detector)
@Nullable private TFile[] filter(@CheckForNull String[] members, @CheckForNull FilenameFilter filter, TArchiveDetector detector)
public TFile getAbsoluteFile()
getAbsoluteFile in class Filepublic String getAbsolutePath()
getAbsolutePath in class Filepublic TArchiveDetector getArchiveDetector()
TArchiveDetector that was used to detect any archive
files in the path of this file object at construction time.TArchiveDetector that was used to detect any archive
files in the path of this file object at construction time.public TFile getCanonicalFile() throws IOException
getCanonicalFile in class FileIOExceptionpublic String getCanonicalPath() throws IOException
getCanonicalPath in class FileIOExceptionpublic TFile getCanOrAbsFile()
public String getCanOrAbsPath()
String instance.@CheckForNull public Icon getClosedIcon()
null.@Nullable FsController<?> getController()
null otherwise.
TODO: Consider making this public in order to enable applications to get access to archive entry properties like this:
null otherwise.private FsController<?> getController(FsMountPoint mountPoint)
public static TArchiveDetector getDefaultArchiveDetector()
TConfig.get().getArchiveDetector().@CheckForNull public TFile getEnclArchive()
null otherwise.
This method always returns a normalized path, i.e. all occurences of
"." and ".." in the path name are removed according to
their meaning wherever possible.
In order to support unlimited nesting levels, this method returns
a TFile instance which may recursively address an entry within
another archive file.
@Nullable public String getEnclEntryName()
'/', or null otherwise.
This method always returns an undotified path, i.e. all redundant
occurences of "." and ".." in the path are removed
wherever possible.
@Nullable FsEntryName getEnclFsEntryName()
public File getFile()
If this file instance has been created from a FileSystemView,
the decorated file object may be an instance of a sibling class, i.e.
another sub-class of File.
File class or any of its
sub-classes, but never an instance of this class and never
null.@CheckForNull public TFile getInnerArchive()
this.
If this object addresses an entry located within an archive file, then
this methods returns the file object representing the enclosing archive
file, or null otherwise.
This method always returns a normalized path, i.e. all occurences of
"." and ".." in the path name are removed according to
their meaning wherever possible.
In order to support unlimited nesting levels, this method returns
a TFile instance which may recursively address an entry within
another archive file.
@Nullable public String getInnerEntryName()
"".
If this object addresses an entry located within an archive file,
then this method returns the relative path of the entry in the
enclosing archive file separated by the entry separator character
'/', or null otherwise.
This method always returns an undotified path, i.e. all redundant
occurences of "." and ".." in the path are removed
wherever possible.
@Nullable FsEntryName getInnerFsEntryName()
@Nullable public TFile getNonArchivedParentFile()
TFile getNonArchiveFile()
public TFile getNormalizedAbsoluteFile()
getAbsoluteFile(), but removes any
"." and ".." directories from the path name wherever
possible.
The result is similar to getCanonicalFile(), but symbolic
links are not resolved.
This may be useful if getCanonicalFile() throws an
IOException.getCanonicalFile(),
getNormalizedFile()public String getNormalizedAbsolutePath()
getAbsolutePath(), but removes any redundant
"." and ".." directories from the path name.
The result is similar to getCanonicalPath(), but symbolic
links are not resolved.
This may be useful if getCanonicalPath() throws an
IOException.getCanonicalPath(),
getNormalizedPath()public TFile getNormalizedFile()
"." and ".." directories from the
path name.public String getNormalizedPath()
".", ".." directories from the
path name.@CheckForNull public Icon getOpenIcon()
null.@Nullable public TFile getParentFile()
getParentFile in class File@Nullable private FsScheme getScheme()
public TFile getTopLevelArchive()
null
if this file object does not name an archive file.
A top level archive is not enclosed in another archive.
If this does not return null, this denotes the longest
part of the path which actually may (but does not need to) exist
as a plain file in the platform file system.public int hashCode()
The implementation in the class TFile delegates the call to its
decorated file.
hashCode in class Fileequals(Object)public void input(InputStream in) throws IOException
in to this file or entry in an archive
file
without closing it.
| Feature | Supported |
|---|---|
| Preserves file attributes | n/a |
| Copies directories recursively | n/a |
| Reads and overwrites special files | Yes |
| Closes parameter stream(s) | Never |
| Direct Data Copying (DDC) | n/a |
| Deletes partial written files on failure | Yes |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
in - the input stream.IOException - if any I/O error occurs.private boolean invariants()
The constructors call this method like this:
assert invariants();
This calls the method if and only if assertions are enabled in order
to assert that the instance invariants are properly obeyed.
If assertions are disabled, the call to this method is thrown away by
the HotSpot compiler, so there is no performance penalty.trueAssertionError - If assertions are enabled and any invariant is
violated.public boolean isAbsolute()
isAbsolute in class Filepublic boolean isArchive()
true if and only if this TFile addresses an
archive file.
Whether or not this is true solely depends on the
TArchiveDetector which was used to construct this TFile
- no file system tests are performed by this method!true if and only if this TFile addresses an
archive file.isEntry(),
isDirectory(),
Detecting Archive Paths and False Positivespublic boolean isDirectory()
true for a valid archive file, too.
For archive file validation its virtual file system gets mounted. In case a RAES encrypted ZIP file gets mounted, the user gets prompted for its password unless the default configuration for key management hasn't been overridden.
This file system operation is virtually atomic.
isDirectory in class FileisArchive(),
isEntry()public boolean isEntry()
true if and only if this TPath addresses an
entry located within an archive file.
Whether or not this is true solely depends on the
TArchiveDetector which was used to construct this TPath
- no file system tests are performed by this method!true if and only if this TPath addresses an
entry located within an archive file.isArchive(),
isDirectory(),
Detecting Archive Paths and False Positivespublic boolean isFile()
false for a valid archive file, too.
For archive file validation its virtual file system gets mounted. In case a RAES encrypted ZIP file gets mounted, the user gets prompted for its password unless the default configuration for key management hasn't been overridden.
This file system operation is virtually atomic.
isFile in class Filepublic boolean isFileSystemRoot()
true if and only if this file denotes a file system
root or a UNC (if running on the Windows platform).true if and only if this file denotes a file system
root or a UNC (if running on the Windows platform).public static boolean isLenient()
TConfig.get().isLenient().setLenient(boolean)public boolean isParentOf(File file)
true if and only if the path represented
by this instance is a direct or indirect parent of the path
represented by the given file.
Note:
file - The file object for the path to test for being a direct or
indirect child of the path of this instance.true if and only if the path represented
by this instance is a direct or indirect parent of the path
represented by the given file.public boolean isUNC()
true if and only if this file denotes a UNC.
Note that this should be relevant on the Windows platform only.true if and only if this file denotes a UNC.private static boolean isUNC(String path)
true if and only if this file denotes a UNC.
Note that this may be only relevant on the Windows platform.path - a file path.true if and only if path denotes a UNC.public long lastModified()
long value representing the time this file was
last modified, measured in milliseconds since the epoch (00:00:00 GMT,
January 1, 1970), or 0L if the file does not exist or if an
I/O error occurs or if this is a ghost directory in an archive file.
This file system operation is virtually atomic.
lastModified in class Filepublic long length()
0 in order
to properly emulate virtual directories across all platforms.
For archive file validation its virtual file system gets mounted. In case a RAES encrypted ZIP file gets mounted, the user gets prompted for its password unless the default configuration for key management hasn't been overridden.
This file system operation is virtually atomic.
length in class File@Nullable public String[] list()
Note: Archive entries with absolute paths are ignored by this method and are never returned.
This file system operation is virtually atomic.
@Nullable public String[] list(@CheckForNull FilenameFilter filter)
filenameFilter in a newly created array.
The returned array is not sorted.
Note: Archive entries with absolute paths are ignored by this method and are never returned.
This file system operation is virtually atomic.
@Nullable public TFile[] listFiles()
listFiles((FilenameFilter) null, getArchiveDetector()).@Nullable public TFile[] listFiles(@CheckForNull FileFilter filter)
listFiles(fileFilter, getArchiveDetector()).@Nullable public TFile[] listFiles(@CheckForNull FileFilter filter, TArchiveDetector detector)
TFile objects for the members in this directory
which are accepted by fileFilter in a newly created array.
The returned array is not sorted.
Note that archive entries with absolute paths are ignored by this method and are never returned.
This file system operation is virtually atomic.
filter - the file filter.detector - The archive detector to detect any archives files in
the member file names.null if this is not a directory or an archive file,
a valid (but maybe empty) array otherwise.@Nullable public TFile[] listFiles(@CheckForNull FilenameFilter filter)
listFiles(filenameFilter, getArchiveDetector()).@Nullable public TFile[] listFiles(@CheckForNull FilenameFilter filter, TArchiveDetector detector)
TFile objects for the members in this directory
which are accepted by filenameFilter in a newly created
array.
The returned array is not sorted.
Note that archive entries with absolute paths are ignored by this method and are never returned.
This file system operation is virtually atomic.
filter - the file filter.detector - the archive detector to detect any archives files in
the member file names.null if this is not a directory or an archive file,
a valid (but maybe empty) array otherwise.@Nullable public TFile[] listFiles(TArchiveDetector detector)
TFile objects for the members in this directory
in a newly created array.
The returned array is not sorted.
Note that archive entries with absolute paths are ignored by this method and are never returned.
This file system operation is virtually atomic.
detector - The archive detector to detect any archives files in
the member file names.null if this is not a directory or an archive file,
a valid (but maybe empty) array otherwise.public boolean mkdir()
isArchive() returns
true.
Example:
new TFile("archive.zip").mkdir();
Alternatively, archive files get created automatically by simply
creating their entries.
Example:
new TFileOutputStream("archive.zip/README");
This assumes the default configuration where isLenient() returns
true.
This file system operation is virtually atomic.
public TFile mkdir(boolean recursive) throws IOException
this path name
exists in the (federated) file system.recursive - whether or not any missing ancestor directories shall
get created if required.thisIOException - if any I/O error occurs.public TFile mv(File dst) throws IOException
mv(this, dst, getArchiveDetector()).dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.thisIOException - if any I/O error occurs.public static void mv(File src, File dst, TArchiveDetector detector) throws IOException
In certain cases, this method might perform a recursive copy-then-delete operation rather than an atomic move operation. In these cases, an attempt is made to copy all attributes of each source file to the destination file, too. Which attributes are actually copied is specific to the destination file system driver implementation, but the minimum guarantee is to copy the last modification time.
src - the source file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.dst - the destination file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.detector - the archive detector to use for detecting any archive
files in the source directory tree.IOException - if any I/O error occurs.public void output(OutputStream out) throws IOException
out
without closing it.
| Feature | Supported |
|---|---|
| Preserves file attributes | n/a |
| Copies directories recursively | n/a |
| Reads and overwrites special files | Yes |
| Closes parameter stream(s) | Never |
| Direct Data Copying (DDC) | n/a |
| Deletes partial written files on failure | n/a |
| Deletes partial written directories on failure | n/a |
| Atomic | No |
out - the output stream.IOException - if any I/O error occurs.private void parse(FsPath path, TArchiveDetector detector)
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
IOExceptionClassNotFoundExceptionpublic TFile rm_r() throws IOException
rm_r(this).thisIOException - if any I/O error occurs.public static void rm_r(File node) throws IOException
If node is an instance of this
class, its archive detector
is used to detect prospective archive files in the directory tree.
Otherwise,
TArchiveDetector.NULL
is used to detect prospective archive files in the directory tree.
This file system operation is not atomic.
node - the file or directory tree.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.IOException - if any I/O error occurs.public TFile rm() throws IOException
rm(this).thisIOException - if any I/O error occurs.public static void rm(File node) throws IOException
This file system operation is virtually atomic.
node - the file or directory.
Note that although this just needs to be a plain File,
archive files and entries are only supported for instances of
this class.IOException - if any I/O error occurs.private void scan(@CheckForNull
TFile ancestor)
ancestor file (i.e. a direct or
indirect parent file) if any.
delegate and detector must already be initialized!
Must not be called to re-initialize this object!private void scan(@CheckForNull
TFile ancestor,
TArchiveDetector detector,
int skip,
String path,
StringBuilder enclEntryNameBuf,
Paths.Splitter splitter)
public static void setDefaultArchiveDetector(TArchiveDetector detector)
TConfig.get().setArchiveDetector(detector).getDefaultArchiveDetector()public boolean setLastModified(long time)
Note that calling this method may incur a severe performance penalty
if the file is an entry in an archive file which has just been written
(such as after a normal copy operation).
If you want to copy a file's contents as well as its last modification
time, use cp_p(File, File) instead.
This file system operation is virtually atomic.
setLastModified in class Filecp_p(File, File),
Package description for more information
about ghost directoriespublic static void setLenient(boolean lenient)
TConfig.get().setLenient(lenient).isLenient()public boolean setReadOnly()
true if the entry isExisting and the
archive file was mounted read only.
This file system operation is virtually atomic.
setReadOnly in class Filepublic static void sync(BitField<FsSyncOption> options) throws FsSyncException
options - a bit field of synchronization options.IllegalArgumentException - if the combination of synchronization
options is illegal, e.g. if
FsSyncOption.FORCE_CLOSE_INPUT is cleared and
FsSyncOption.FORCE_CLOSE_OUTPUT is set or if the
synchronization option FsSyncOption.ABORT_CHANGES is set.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!public static void sync(TFile archive, BitField<FsSyncOption> options) throws FsSyncException
archive
and all its member federated file systems to their respective parent
file system, releases the associated resources (i.e. target archive
files) for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
Note that temporary files may get used even if the archive files where
accessed read-only.
If a client application needs to sync an individual archive file, the following idiom could be used:
if (file.isArchive() && file.getEnclArchive() == null) // filter top level federated file system
if (file.isDirectory()) // ignore false positives
TFile.sync(file); // sync federated file system and all its members
Again, this will also sync all federated file systems which are
located within the file system referred to by file.archive - a top level federated file system, i.e. a prospective
archive file.options - a bit field of synchronization options.IllegalArgumentException - if archive is not a top level
federated file system or the combination of synchronization
options is illegal, e.g. if
FsSyncOption.FORCE_CLOSE_INPUT is cleared and
FsSyncOption.FORCE_CLOSE_OUTPUT is set or if the
synchronization option FsSyncOption.ABORT_CHANGES is set.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(BitField)public FsPath toFsPath()
toURI().toURI().TFile(FsPath),
toURI()public URI toURI()
Otherwise, an opaque URI of the form <scheme>:<uri>!/<entry> is
returned, where <scheme> is the URI scheme component identifying
a file system driver, <uri> is the URI returned by this method
for the innermost archive file and <entry> is the relative path
name of the the entry addressed by this file object in the innermost
archive file.
If this file object addresses an archive file, then <uri> is the
URI which would have been returned by this method if the file name of
the archive file had not been detected as a prospective archive file
and entry is an empty string.
file:/foo addresses a regular filewar:file:/foo.war!/ addresses the root entry of the WAR file
addressed by file:/foo.war.war:file:/foo.war!/META-INF/MANIFEST.MF addresses the entry
META-INF/MANIFEST.MF in the WAR file addressed by
file:/foo.war.jar:war:file:/foo.war!/WEB-INF/lib/bar.jar!/META-INF/MANIFEST.MF
addresses the entry META-INF/MANIFEST.MF in the JAR file
addressed by war:file:/foo.war!/WEB-INF/lib/bar.jar, which
recursively addresses the entry WEB-INF/lib/bar.jar in the
WAR file addressed by file:/foo.war.toURI in class FileTFile(URI),
toFsPath()@Deprecated public URL toURL() throws MalformedURLException
toURL in class FileMalformedURLExceptionpublic static void umount()
throws FsSyncException
This method is equivalent to calling
sync(FsSyncOptions.UMOUNT).
FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(BitField)public static void umount(boolean forceCloseInputAndOutput)
throws FsSyncException
This method is equivalent to calling
sync( BitField.of(FsSyncOption.CLEAR_CACHE)
.set(FsSyncOption.FORCE_CLOSE_INPUT, forceCloseInputAndOutput)
.set(FsSyncOption.FORCE_CLOSE_OUTPUT, forceCloseInputAndOutput))
.
forceCloseInputAndOutput - see
FsSyncOption.FORCE_CLOSE_INPUT
and FsSyncOption.FORCE_CLOSE_OUTPUT.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. prospective archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(BitField)public static void umount(boolean waitCloseInput,
boolean forceCloseInput,
boolean waitCloseOutput,
boolean forceCloseOutput)
throws FsSyncException
This method is equivalent to calling
sync( BitField.of(FsSyncOption.CLEAR_CACHE)
.set(FsSyncOption.WAIT_CLOSE_INPUT, waitCloseInput)
.set(FsSyncOption.FORCE_CLOSE_INPUT, forceCloseInput)
.set(FsSyncOption.WAIT_CLOSE_OUTPUT, waitCloseOutput)
.set(FsSyncOption.FORCE_CLOSE_OUTPUT, forceCloseOutput))
.
waitCloseInput - see FsSyncOption.WAIT_CLOSE_INPUT.forceCloseInput - see FsSyncOption.FORCE_CLOSE_INPUT.waitCloseOutput - see FsSyncOption.WAIT_CLOSE_OUTPUT.forceCloseOutput - see FsSyncOption.FORCE_CLOSE_OUTPUT.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. prospective archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(BitField)public static void umount(TFile archive) throws FsSyncException
archive
and all its member federated file systems to their respective parent
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
Note that temporary files may get used even if the archive files where
accessed read-only.
This method is equivalent to calling
sync(archive, FsSyncOptions.UMOUNT)
.
archive - a top level federated file system, i.e. a prospective
archive file.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. prospective archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(TFile, BitField)public static void umount(TFile archive, boolean forceCloseInputAndOutput) throws FsSyncException
archive
and all its member federated file systems to their respective parent
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
Note that temporary files may get used even if the archive files where
accessed read-only.
This method is equivalent to calling
sync( archive,
BitField.of(FsSyncOption.CLEAR_CACHE)
.set(FsSyncOption.FORCE_CLOSE_INPUT, forceCloseInputAndOutput)
.set(FsSyncOption.FORCE_CLOSE_OUTPUT, forceCloseInputAndOutput))
.
archive - a top level federated file system, i.e. a prospective
archive file.forceCloseInputAndOutput - see
FsSyncOption.FORCE_CLOSE_INPUT and
FsSyncOption.FORCE_CLOSE_OUTPUT.IllegalArgumentException - if archive is not a top level
federated file system or the combination of synchronization
options is illegal, e.g. if
FsSyncOption.FORCE_CLOSE_INPUT is cleared and
FsSyncOption.FORCE_CLOSE_OUTPUT is set or if the
synchronization option FsSyncOption.ABORT_CHANGES is set.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. prospective archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(TFile, BitField)public static void umount(TFile archive, boolean waitCloseInput, boolean forceCloseInput, boolean waitCloseOutput, boolean forceCloseOutput) throws FsSyncException
archive
and all its member federated file systems to their respective parent
system, releases the associated resources (i.e. target archive files)
for access by third parties (e.g. other processes), cleans up any
temporary allocated resources (e.g. temporary files) and purges any
cached data.
Note that temporary files may get used even if the archive files where
accessed read-only.
This method is equivalent to calling
sync( archive,
BitField.of(FsSyncOption.CLEAR_CACHE)
.set(FsSyncOption.WAIT_CLOSE_INPUT, waitCloseInput)
.set(FsSyncOption.FORCE_CLOSE_INPUT, forceCloseInput)
.set(FsSyncOption.WAIT_CLOSE_OUTPUT, waitCloseOutput)
.set(FsSyncOption.FORCE_CLOSE_OUTPUT, forceCloseOutput))
.
archive - a top level federated file system, i.e. a prospective
archive file.waitCloseInput - see FsSyncOption.WAIT_CLOSE_INPUT.forceCloseInput - see FsSyncOption.FORCE_CLOSE_INPUT.waitCloseOutput - see FsSyncOption.WAIT_CLOSE_OUTPUT.forceCloseOutput - see FsSyncOption.FORCE_CLOSE_OUTPUT.IllegalArgumentException - if archive is not a top level
federated file system or the combination of synchronization
options is illegal, e.g. if
FsSyncOption.FORCE_CLOSE_INPUT is cleared and
FsSyncOption.FORCE_CLOSE_OUTPUT is set or if the
synchronization option FsSyncOption.ABORT_CHANGES is set.FsSyncWarningException - if only warning conditions
occur.
This implies that the respective parent file system has been
updated with constraints, such as a failure to set the last
modification time of the entry for the federated file system
(i.e. prospective archive file) in its parent file system.FsSyncException - if any error conditions occur.
This implies loss of data!sync(TFile, BitField)private void writeObject(ObjectOutputStream out) throws IOException
IOExceptionprivate Object writeReplace() throws ObjectStreamException
ObjectStreamExceptionCopyright © 2004-2011 Schlichtherle IT Services. All Rights Reserved.