Accessing Individual File Attributes
The Files class provides a myriad of static methods to access individual file attributes of a directory entry. It is a good idea to consult the code in Example 21.4 as we take a closer look at the relevant methods in this subsection. Since methods in the Files class can throw an IOException, the main() method specifies a throws clause with this exception.
Example 21.4 Accessing Individual Attributes
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.*;
import java.util.*;
import static java.lang.System.out;
import static java.nio.file.attribute.PosixFilePermission.*;
public class IndividualFileAttributes {
public static void main(String[] args) throws IOException {
Path fPath = Path.of(“project”, “src”, “pkg”, “Main.java”);
out.println(“File: ” + fPath);
out.println(“Accessing Individual File Attributes:”);
out.println(“size file (bytes): ” + Files.size(fPath)); // (1)
out.println(“isDirectory: ” + Files.isDirectory(fPath)); // (2)
out.println(“isRegularFile: ” + Files.isRegularFile(fPath)); // (3)
out.println(“isSymbolicLink: ” + Files.isSymbolicLink(fPath)); // (4)
out.println();
out.println(“isReadable: ” + Files.isReadable(fPath)); // (5)
out.println(“isWritable: ” + Files.isWritable(fPath)); // (6)
out.println(“isExecutable: ” + Files.isExecutable(fPath)); // (7)
out.println(“isHidden: ” + Files.isHidden(fPath)); // (8)
out.println();
out.println(“getLastModifiedTime: ” + Files.getLastModifiedTime(fPath));// (9)
out.println(“getOwner: ” + Files.getOwner(fPath)); // (10)
out.println();
// Get the POSIX file permissions for the directory entry:
Set<PosixFilePermission> filePermissions
= Files.getPosixFilePermissions(fPath); // (11)
out.println(“getPosixFilePermissions (set): ” + filePermissions); // (12)
out.println(“getPosixFilePermissions (string): “
+ PosixFilePermissions.toString(filePermissions)); // (13)
// Get the group of the directory entry:
out.println(“getAttribute-group: ” + Files.getAttribute(fPath, // (14)
“posix:group”));
out.println();
// Update last modified time for the directory entry. (15)
long currentTime = System.currentTimeMillis();
FileTime timestamp = FileTime.fromMillis(currentTime);
Files.setLastModifiedTime(fPath, timestamp);
// Set new owner for the directory entry. (16)
FileSystem fs = fPath.getFileSystem(); // File system that created the path.
UserPrincipalLookupService upls
= fs.getUserPrincipalLookupService();// Obtain service to look up user.
UserPrincipal user = upls.lookupPrincipalByName(“khalid”); // User lookup.
Files.setOwner(fPath, user); // Set user.
// Set POSIX file permissions for the directory entry: (17)
Set<PosixFilePermission> newfilePermissions
= EnumSet.of(OWNER_READ, OWNER_WRITE, GROUP_READ, GROUP_WRITE); // (18a)
//Set<PosixFilePermission> newfilePermissions
// = PosixFilePermissions.fromString(“rw-rw—-“); // (18b)
Files.setPosixFilePermissions(fPath, newfilePermissions); // (19)
filePermissions = Files.getPosixFilePermissions(fPath);
out.println(“getPosixFilePermissions (set): ” + filePermissions);
out.println(“getPosixFilePermissions (string): “
+ PosixFilePermissions.toString(filePermissions));
// Setting the value of a file attribute by its attribute name.
Files.setAttribute(fPath, “lastAccessTime”, timestamp); // (20)
}
}
Possible output from the program:
File: project/src/pkg/Main.java
Accessing Individual File Attributes:
size file (bytes): 13
isDirectory: false
isRegularFile: true
isSymbolicLink: false
isReadable: true
isWritable: true
isExecutable: false
isHidden: false
getLastModifiedTime: 2021-08-06T10:28:47.416033Z
getOwner: khalid
getPosixFilePermissions (set): [OTHERS_READ, OWNER_WRITE, OWNER_READ, GROUP_READ]
getPosixFilePermissions (string): rw-r–r–
getAttribute-group: admin
getPosixFilePermissions (set): [GROUP_WRITE, OWNER_WRITE, OWNER_READ, GROUP_READ]
getPosixFilePermissions (string): rw-rw—-
Leave a Reply