Если у вас есть вопросы по поводу файла или каталога, например, является ли он скрытым, является ли он каталогом, каков его размер и кому он принадлежит, вы можете получить ответы на эти (и многие другие) вопросы из метаданных , который является данными о других данных.
NIO.2 связывает понятие метаданных с атрибутами и обеспечивает доступ к ним через пакет java.nio.file.attribute
. Поскольку разные файловые системы имеют разные представления о том, какие атрибуты должны отслеживаться, NIO.2 группирует атрибуты в представления, каждое из которых сопоставляется с конкретной реализацией файловой системы.
Как правило, представления предоставляют атрибуты оптом через общий метод readAttributes()
. Кроме того, вы можете извлечь и установить один атрибут с помощью getAttribute()
и setAttribute(
соответственно, доступных в классе java.nio.file.Files
. В зависимости от представления для дополнительных задач доступны другие методы.
Здесь я объясню, как с NIO.2 вы можете управлять более подробной информацией о метаданных файлов, чем когда-либо прежде. Атрибуты разделены на категории, и теперь они также охватывают системы POSIX .
Прежде чем пытаться получить доступ к атрибутам представления, убедитесь, что ваша файловая система поддерживает соответствующее представление.
NIO.2 поставляется с набором из шести представлений ( Basic
Dos
, POSIX
FileOwner
, ACL
и UserDefinedFileAttributeView
).
- POSIX (Портативный интерфейс операционной системы для UNIX).
- Все файловые системы поддерживают базовое представление, поэтому вы должны получить хотя бы базовое имя в своем выводе.
Поддерживаемые виды:
- BasicFileAttributeView
Это представление основных атрибутов, которые должны поддерживаться всеми реализациями файловой системы. Имя представления атрибута является основным. - DosFileAttributeView
Это представление предоставляет четыре стандартных поддерживаемых атрибута в файловых системах, которые поддерживают атрибуты DOS. Имя представления атрибута — dos. - PosixFileAttributeView
Это представление расширяет представление базовых атрибутов атрибутами, поддерживаемыми в файловых системах, которые поддерживают семейство стандартов POSIX (Portable Operating System Interface для Unix), таких как Unix. Имя представления атрибута — posix. - FileOwnerAttributeView
Это представление поддерживается любой реализацией файловой системы, которая поддерживает концепцию владельца файла. Имя представления атрибута — владелец. - AclFileAttributeView
Это представление поддерживает чтение или обновление ACL файла. Модель ACL NFSv4 поддерживается. Имя представления атрибута — acl. - UserDefinedFileAttributeView
Это представление включает поддержку метаданных, определенных пользователем.
Вот фрагменты кода, которые показывают различные операции
- Получить все поддерживаемые представления файловой системы
123456789
import
static
java.lang.System.out;
.......
FileSystem fs = FileSystems.getDefault();
for
(String sfsView : fs.supportedFileAttributeViews()) {
out.println(sfsView);
}
- Проверьте, поддерживает ли хранилище файлов определенный вид
Вы можете проверить определенное представление в хранилище файлов, вызвав методFileStore.supportsFileAttributeView()
. Вы можете передать желаемое представление в виде строки или имени класса.01020304050607080910import
static
java.lang.System.out;
.......
FileSystem fs = FileSystems.getDefault();
for
(FileStore fileStore : fs.getFileStores()) {
boolean
supported = fileStore.supportsFileAttributeView(BasicFileAttributeView.
class
);
out.println(
"Is "
+ fileStore.name() +
": supports \'basic file attribute view\' ---> "
+ (supported ?
"Yes"
:
"No"
));
}
- Проверьте, поддерживает ли хранилище файлов, в котором находится конкретный файл, одно представление
Кроме того, вы можете проверить, поддерживает ли хранилище файлов, в котором находится конкретный файл, одно представление.0102030405060708091011121314import
static
java.lang.System.out;
import
static
java.lang.System.err;
.......
FileSystem fs = FileSystems.getDefault();
try
{
FileStore store = getFileStore(path);
boolean
supported = store.supportsFileAttributeView(
"acl"
);
out.println(
"Is "
+ store.name() +
": supports \'ACL file attribute view\' ---> "
+ (supported ?
"Yes"
:
"No"
));
}
catch
(IOException ex) {
err.println(ex);
}
Вот и все, веселись, если тебе нравится, поделись.
Ресурсы:
- JDK7: Часть 1. Сила Java 7 NIO.2 (JSR 203) (важные понятия)
- JSR 203: больше новых API ввода-вывода для платформы JavaTM («NIO.2»)