Статьи

JavaSE 7,8: определение представлений, поддерживаемых определенной файловой системой

Если у вас есть вопросы по поводу файла или каталога, например, является ли он скрытым, является ли он каталогом, каков его размер и кому он принадлежит, вы можете получить ответы на эти (и многие другие) вопросы из метаданных , который является данными о других данных.

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).
  • Все файловые системы поддерживают базовое представление, поэтому вы должны получить хотя бы базовое имя в своем выводе.

Поддерживаемые виды:

  1. BasicFileAttributeView
    Это представление основных атрибутов, которые должны поддерживаться всеми реализациями файловой системы. Имя представления атрибута является основным.
  2. DosFileAttributeView
    Это представление предоставляет четыре стандартных поддерживаемых атрибута в файловых системах, которые поддерживают атрибуты DOS. Имя представления атрибута — dos.
  3. PosixFileAttributeView
    Это представление расширяет представление базовых атрибутов атрибутами, поддерживаемыми в файловых системах, которые поддерживают семейство стандартов POSIX (Portable Operating System Interface для Unix), таких как Unix. Имя представления атрибута — posix.
  4. FileOwnerAttributeView
    Это представление поддерживается любой реализацией файловой системы, которая поддерживает концепцию владельца файла. Имя представления атрибута — владелец.
  5. AclFileAttributeView
    Это представление поддерживает чтение или обновление ACL файла. Модель ACL NFSv4 поддерживается. Имя представления атрибута — acl.
  6. UserDefinedFileAttributeView
    Это представление включает поддержку метаданных, определенных пользователем.

Вот фрагменты кода, которые показывают различные операции

  • Получить все поддерживаемые представления файловой системы
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import static java.lang.System.out;
      
    .......
      
    FileSystem fs = FileSystems.getDefault();
      
    for (String sfsView : fs.supportedFileAttributeViews()) {
            out.println(sfsView);
            }
  • Проверьте, поддерживает ли хранилище файлов определенный вид
    Вы можете проверить определенное представление в хранилище файлов, вызвав метод FileStore.supportsFileAttributeView() . Вы можете передать желаемое представление в виде строки или имени класса.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    import 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"));
    }
  • Проверьте, поддерживает ли хранилище файлов, в котором находится конкретный файл, одно представление
    Кроме того, вы можете проверить, поддерживает ли хранилище файлов, в котором находится конкретный файл, одно представление.

    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    import 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);
    }

Вот и все, веселись, если тебе нравится, поделись.

Ресурсы: