Extended File Attributes

In addition to the basic file attributes offered by the Java standard, javaxt.io.File and javaxt.io.Directory classes provide extended file attributes including Creation Date and Last Access Time. Here's a simple comparision of the capabilities offered by the javaxt-core library.

AttributeJava 1.6JavaXT
File Namexx
File Sizexx
File Permissionsxx
Last Modified Datexx
Last Access Timex
Creation Datex
Is Linkx
Link Targetx
Additional File Metadatax

Last Access Time

Knowing when a file or directory was last accessed is a key attribute for monitoring and auditing file systems. This important attribute is available on both Windows and Unix/Linux file systems. The javaxt.io.File and javaxt.io.Directory classes both provide methods to retrieve the last access time. Here's an example of how to retrieve the last access time for a file:

        javaxt.io.File file = new javaxt.io.File("/temp/file.txt");
        System.out.println("Accessed: " + file.getLastAccessTime());

Creation Time

Knowing when a file or directory was created is another key attribute. Unfortunately, not all file systems store this attribute. Most modern Linux and Windows file systems do store the creation time. Older UNIX systems (e.g. Solaris) do not. Here's an example of how you can retrieve the creation time for a file:

        javaxt.io.File file = new javaxt.io.File("/temp/file.txt");
        System.out.println("Created: " + file.getCreationTime());

Content Type

The javaxt.io.File includes a method to return the MIME type associated with a file extension. This method only covers the most common/popular MIME types. Here's an example:

String contentType = new javaxt.io.File("/temp/file.txt").getContentType();
System.out.println(contentType); //returns "text/plain"

Links and Shortcuts

The javaxt.io.File and javaxt.io.Directory classes include methods to determine whether a file is actually a link to another file (e.g. Symbolic link, Windows Junction, or Windows Shortcut). Users also have the ability to parse the link to retrieve the link target. Example:

        javaxt.io.File file = new javaxt.io.File("/temp/file.txt");        
        if (file.isLink()){
            System.out.println(file.getLink());
        }

Additional File Metadata

The getFlags() method provides additional metadata values such as whether the file is encrypted or offline. Many of these attributes are specific to Microsoft File Systems (e.g. NTFS). A complete list of known flags follows this example.


        javaxt.io.File file = new javaxt.io.File("/temp/file.txt");        
        java.util.Iterator<String> it = file.getFlags().iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

Known Flags

Here's a complete list of known flags published by Microsoft. Some of these are available for UNIX/Linux file systems as well (e.g. "READONLY", "HIDDEN", "DIRECTORY", "REPARSE_POINT", etc).

Constant/valueDescription
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)

A file or directory that is an archive file or directory. Applications typically use this attribute to mark files for backup or removal . 

FILE_ATTRIBUTE_COMPRESSED
2048 (0x800)

A file or directory that is compressed. For a file, all of the data in the file is compressed. For a directory, compression is the default for newly created files and subdirectories.

FILE_ATTRIBUTE_DEVICE
64 (0x40)

This value is reserved for system use.

FILE_ATTRIBUTE_DIRECTORY
16 (0x10)

The handle that identifies a directory.

FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)

A file or directory that is encrypted. For a file, all data streams in the file are encrypted. For a directory, encryption is the default for newly created files and subdirectories.

FILE_ATTRIBUTE_HIDDEN
2 (0x2)

The file or directory is hidden. It is not included in an ordinary directory listing.

FILE_ATTRIBUTE_NORMAL
128 (0x80)

A file that does not have other attributes set. This attribute is valid only when used alone.

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
8192 (0x2000)

The file or directory is not to be indexed by the content indexing service.

FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)

The data of a file is not available immediately. This attribute indicates that the file data is physically moved to offline storage. This attribute is used by Remote Storage, which is the hierarchical storage management software. Applications should not arbitrarily change this attribute.

FILE_ATTRIBUTE_READONLY
1 (0x1)

A file that is read-only. Applications can read the file, but cannot write to it or delete it. This attribute is not honored on directories. For more information, see You cannot view or change the Read-only or the System attributes of folders in Windows Server 2003, in Windows XP, in Windows Vista or in Windows 7.

FILE_ATTRIBUTE_REPARSE_POINT
1024 (0x400)

A file or directory that has an associated reparse point, or a file that is a symbolic link.

FILE_ATTRIBUTE_SPARSE_FILE
512 (0x200)

A file that is a sparse file.

FILE_ATTRIBUTE_SYSTEM
4 (0x4)

A file or directory that the operating system uses a part of, or uses exclusively.

FILE_ATTRIBUTE_TEMPORARY
256 (0x100)

A file that is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because typically, an application deletes a temporary file after the handle is closed. In that scenario, the system can entirely avoid writing the data. Otherwise, the data is written after the handle is closed.

FILE_ATTRIBUTE_VIRTUAL
65536 (0x10000)

This value is reserved for system use.

Reference