1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
|
package io.skas.melbjvm.nio2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.*;
import java.util.Set;
import static com.sun.deploy.util.StringUtils.join;
/**
* @author Szymon Szukalski [szymon.szukalski@gmail.com]
*/
public class Nio2MetaDataLoggingUtils {
public static final Logger LOG = LoggerFactory.getLogger(Nio2MetaDataLoggingUtils.class);
public static final long BYTES_IN_MEGABYTE = 1048576L;
public static final String BASIC_VIEW = "basic";
public static final String OWNER_VIEW = "owner";
public static final String DOS_VIEW = "dos";
public static final String POSIX_VIEW = "posix";
public static void logSupportedViews(Path path) {
final FileSystem fileSystem = path.getFileSystem();
final Set<String> supportedViews = fileSystem.supportedFileAttributeViews();
LOG.info("File Attribute Views supported by the FileSystem that created {}", path);
LOG.info(" {}", join(supportedViews, ", "));
}
public static void logBasicFileAttributes(Path path) throws IOException {
final FileStore fileStore = Files.getFileStore(path);
if (fileStore.supportsFileAttributeView(BASIC_VIEW)) {
BasicFileAttributes basicFileAttributes = Files.readAttributes(path, BasicFileAttributes.class);
LOG.info("Basic file attributes for path [{}]", path);
LOG.info(" isDirectory? {}", basicFileAttributes.isDirectory());
LOG.info(" isOther? {}", basicFileAttributes.isOther());
LOG.info(" isRegularFile? {}", basicFileAttributes.isRegularFile());
LOG.info(" isSymbolicLink? {}", basicFileAttributes.isSymbolicLink());
} else {
LOG.info("the file store in which [{}] resides doesn't support the [{}] file attribute view", path, BASIC_VIEW);
}
}
public static void logDosFileAttributes(Path path) throws IOException {
final FileStore fileStore = Files.getFileStore(path);
if (fileStore.supportsFileAttributeView(DOS_VIEW)) {
DosFileAttributes dosFileAttributes = Files.readAttributes(path, DosFileAttributes.class);
LOG.info("Dos file attributes for path [{}]", path);
LOG.info(" isArchive? {}", dosFileAttributes.isArchive());
LOG.info(" isHidden? {}", dosFileAttributes.isHidden());
LOG.info(" isReadOnly? {}", dosFileAttributes.isReadOnly());
LOG.info(" isSystem? {}", dosFileAttributes.isSystem());
} else {
LOG.info("the file store in which [{}] resides doesn't support the [{}] file attribute view", path, DOS_VIEW);
}
}
public static void logPosixFileAttributes(Path path) throws IOException {
final FileStore fileStore = Files.getFileStore(path);
if (fileStore.supportsFileAttributeView(POSIX_VIEW)) {
PosixFileAttributes posixFileAttributes = Files.readAttributes(path, PosixFileAttributes.class);
final Set<PosixFilePermission> permissions = posixFileAttributes.permissions();
LOG.info("Posix file attributes for path [{}]", path);
LOG.info(" owner? {}", posixFileAttributes.owner());
LOG.info(" group? {}", posixFileAttributes.group());
LOG.info(" owner permissions? {}",
(permissions.contains(PosixFilePermission.OWNER_READ) ? "r" : "-") +
(permissions.contains(PosixFilePermission.OWNER_WRITE) ? "w" : "-") +
(permissions.contains(PosixFilePermission.OWNER_EXECUTE) ? "x" : "-"));
LOG.info(" group permissions? {}",
(permissions.contains(PosixFilePermission.GROUP_READ) ? "r" : "-") +
(permissions.contains(PosixFilePermission.GROUP_WRITE) ? "w" : "-") +
(permissions.contains(PosixFilePermission.GROUP_EXECUTE) ? "x" : "-"));
LOG.info(" others permissions? {}",
(permissions.contains(PosixFilePermission.OTHERS_READ) ? "r" : "-") +
(permissions.contains(PosixFilePermission.OTHERS_WRITE) ? "w" : "-") +
(permissions.contains(PosixFilePermission.OTHERS_EXECUTE) ? "x" : "-"));
} else {
LOG.info("the file store in which [{}] resides doesn't support the [{}] file attribute view", path, POSIX_VIEW);
}
}
public static void logFileOwnerAttributes(Path path) throws IOException {
final FileStore fileStore = Files.getFileStore(path);
if (fileStore.supportsFileAttributeView(OWNER_VIEW)) {
final FileOwnerAttributeView fileAttributeView = Files.getFileAttributeView(path, FileOwnerAttributeView.class);
LOG.info("Owner file attributes for path [{}]", path);
LOG.info(" principal: {}", fileAttributeView.getOwner());
} else {
LOG.info("the file store in which [{}] resides doesn't support the [{}] file attribute view", path, OWNER_VIEW);
}
}
public static void logFileStoreAttributes(Path path) throws IOException {
final FileStore fileStore = Files.getFileStore(path);
LOG.info("File store attributes for path [{}]", path);
LOG.info(" name: {}", fileStore.name());
LOG.info(" type: {}", fileStore.type());
LOG.info(" total space: {}", fileStore.getTotalSpace() / BYTES_IN_MEGABYTE);
LOG.info(" total unallocated: {}", fileStore.getUnallocatedSpace() / BYTES_IN_MEGABYTE);
LOG.info(" total space: {}", fileStore.getUsableSpace() / BYTES_IN_MEGABYTE);
}
}
|