Package org.apache.sshd.common.util.io
Class FileSnapshot
- java.lang.Object
-
- org.apache.sshd.common.util.io.FileSnapshot
-
public class FileSnapshot extends Object
A snapshot of file metadata that can be used to determine whether a file has been modified since the last time it was read. Intended usage:FileSnapshot fileSnapshot = FileSnapshot.save(path); byte[] content = Files.readAllBytes(path); ... FileSnapshot newSnapshot = oldSnapshot.reload(path); if (newSnapshot == fileSnapshot) { // File was not modified } else { // File may have been modified fileSnapshot = newSnapshot; content = Files.readAllBytes(path); }File modifications that occur quicker than the resolution of the system's "last modified" timestamp of a file cannot be detected reliably. This implementation assumes a worst-case filesystem timestamp resolution of 2 seconds (as it exists on FAT file systems). A snapshot taken within 2 seconds since the last modified time is considered "racily clean" only: the file will be considered potentially modified even if the metadata matches.
- Author:
- Apache MINA SSHD Project
-
-
Field Summary
Fields Modifier and Type Field Description static FileSnapshotNO_FILEAFileSnapshotdescribing a non-existing file.static longUNKNOWN_SIZEA value indicating an unknown file size.
-
Constructor Summary
Constructors Modifier Constructor Description protectedFileSnapshot(Instant snapTime, FileTime lastModified, long size, Object fileKey)Creates a newFileSnapshotinstance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected ObjectgetFileKey()Retrieves the file key as recorded in thisFileSnapshot.protected FileTimegetLastModified()Retrieves the "last modified" time as recorded in thisFileSnapshot.protected longgetSize()Retrieves the file size as recorded in thisFileSnapshot.protected InstantgetTime()Retrieves the time thisFileSnapshotwas taken.protected booleanmayBeRacilyClean()Determines whether thisFileSnapshotwas taken within the file timestamp resolution of the file system after the last modified time of the file.FileSnapshotreload(Path file, LinkOption... options)Reload theFileSnapshotfor the given file.booleansame(FileSnapshot other)Compares the snapshots' file metadata.static FileSnapshotsave(Path file, LinkOption... options)Creates a newFileSnapshotfor the given path.
-
-
-
Field Detail
-
UNKNOWN_SIZE
public static final long UNKNOWN_SIZE
A value indicating an unknown file size.- See Also:
- Constant Field Values
-
NO_FILE
public static final FileSnapshot NO_FILE
AFileSnapshotdescribing a non-existing file.
-
-
Method Detail
-
getLastModified
protected FileTime getLastModified()
Retrieves the "last modified" time as recorded in thisFileSnapshot.- Returns:
- the
FileTime, may benull
-
getSize
protected long getSize()
Retrieves the file size as recorded in thisFileSnapshot.- Returns:
- the size,
UNKNOWN_SIZEfor a snapshot of a non-existing file
-
getFileKey
protected Object getFileKey()
Retrieves the file key as recorded in thisFileSnapshot.- Returns:
- the file key, may be
null
-
getTime
protected Instant getTime()
Retrieves the time thisFileSnapshotwas taken.- Returns:
- the
Instantthe snapshot was taken, nevernull
-
save
public static FileSnapshot save(Path file, LinkOption... options) throws IOException
Creates a newFileSnapshotfor the given path.- Parameters:
file- to take the snapshot ofoptions-LinkOptions to use- Returns:
- the
FileSnapshot, nevernull - Throws:
IOException- if an I/O error occurs
-
reload
public FileSnapshot reload(Path file, LinkOption... options) throws IOException
Reload theFileSnapshotfor the given file.- Parameters:
file- to take the snapshot ofoptions-LinkOptions to use- Returns:
- a
FileSnapshot, nevernull; if== this, the file may be assumed unmodified - Throws:
IOException- if an I/O error occurs
-
mayBeRacilyClean
protected boolean mayBeRacilyClean()
Determines whether thisFileSnapshotwas taken within the file timestamp resolution of the file system after the last modified time of the file.- Returns:
trueif so,falseotherwise
-
same
public boolean same(FileSnapshot other)
Compares the snapshots' file metadata.- Parameters:
other-FileSnapshotto compare to (should be for the samePath)- Returns:
trueif the two snapshots have the same file metadata,falseotherwise
-
-