В предыдущей статье «Определение представлений, поддерживаемых определенной файловой системой» и посмотрите, как запросить хранилище файловой системы, а также посмотрите поддерживаемость конкретного представления атрибута файла.
Вкратце мы рассмотрим один из самых сложных и важных видов атрибутов файлов — представление пользовательских атрибутов файлов .
В частности, я часто использую эту функцию в моих обмениваемых файлах во время интеграции между моими системами, чтобы скрыть метаданные файлов и информацию, связанную с безопасностью, от пользователей и содержимого файла. Таким образом, содержимое файла будет относиться только к содержимому файла, не более ненужных метаданных .
Поэтому, если вы обнаружите, что встроенных атрибутов недостаточно для ваших нужд или если у вас есть какие-то уникальные метаданные ( значимые для файловой системы ), которые вы хотите связать с файлом, вы можете определить свои собственные атрибуты.
 NIO.2 предлагает представление пользовательских атрибутов файла, расширенные атрибуты через интерфейс UserDefinedFileAttributeView .  Эта возможность позволяет вам связать с файлом любой атрибут, который вы считаете полезным для ваших случаев использования. 
Здесь вы должны знать, как:
- Проверьте поддержку пользовательских атрибутов
-   Операции над пользовательскими атрибутами как следующие:
- Определите атрибут пользователя.
- Список имен пользовательских атрибутов и размеров значений.
- Получить значение пользовательского атрибута.
- Удалить определяемый пользователем атрибут файла.
 
Вот класс, у которого есть определенные ранее операции, также вам нужно использовать JDK 7+:
| 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102 103 104 105 106 | importstaticjava.lang.System.err;importstaticjava.lang.System.out;importjava.nio.ByteBuffer;importjava.nio.charset.Charset;importjava.nio.file.FileSystem;importjava.nio.file.FileSystems;importjava.nio.file.Files;importstaticjava.nio.file.Files.getFileStore;importjava.nio.file.Path;importstaticjava.nio.file.Paths.get;importjava.nio.file.attribute.UserDefinedFileAttributeView; /** * GET/SET FILES METADATA THROUGH THE NEW JAVA.NIO.FILE.ATTRIBUTE API. * * @author mohamed_taman * * @see java.nio.file.attribute * @see java.nio.file.Files */publicclassMetadataOperations {     privatestaticFileSystem fs = FileSystems.getDefault();    privatestaticPath path = get("C:", "workspace/NIO2", "resources", "TOC.txt");     publicstaticvoidmain(String... args) {        //User-Defined File Attributes View |        userDefinedViewsOperations();     }     privatestaticvoiduserDefinedViewsOperations() {         try{                         // Check User-Defined Attributes Supportability             if(getFileStore(path)                .supportsFileAttributeView(UserDefinedFileAttributeView.class)) {                                // 1- Define a User Attribute.                                 UserDefinedFileAttributeView udfav = Files.getFileAttributeView(path,                           UserDefinedFileAttributeView.class);                                 out.println("Attrs. before deletion. its size: "+ udfav.list().size());                                 for(String name : udfav.list()) {                    out.println(udfav.size(name) + " "+ name);                }                 intwritten = udfav.write("file.description", Charset.defaultCharset().                        encode("This file contains private information about HOL2846!"));                 // 2- List User-Defined Attribute Names and Value Sizes.                                 for(String name : udfav.list()) {                    out.println(udfav.size(name) + " "+ name);                }                 // 3- Get the Value of a User-Defined Attribute.                                  intsize = udfav.size("file.description");                ByteBuffer bb = ByteBuffer.allocateDirect(size);                udfav.read("file.description", bb);                bb.flip();                 out.println(Charset.defaultCharset().decode(bb).toString());                 /**                 * Note: Using the UserDefinedFileAttributeView.size() method,                  * you can easily set the correct size of the buffer that represents                  * the value of the user-defined attribute.                 *                  * Note: You can also read an attribute by using the getAttribute() method.                  * The value is returned as byte array (byte[]).                 *                  */                                  // 4- Delete a File’s User-Defined Attribute.                              out.println("Attrs. before deletion.");                                 for(String name : udfav.list()) {                    out.println(udfav.size(name) + " "+ name);                }                 udfav.delete("file.description");                 out.println("Attrs. after deletion.");                                 for(String name : udfav.list()) {                    out.println(udfav.size(name) + " "+ name);                }             } else{                 out.println(path.toAbsolutePath().toString() +                          ", Doesn't support user defined attributes.");            }        } catch(Exception e) {            err.println(e);        }    }} | 
Ресурсы
- JavaSE 7,8: определение представлений, поддерживаемых определенной файловой системой
- JSR 203: больше новых API ввода-вывода для платформы JavaTM («NIO.2»)
- Учебное пособие по Java SE: Файловый ввод / вывод (с NIO.2)
| Ссылка: | JavaSE: Как УСТАНОВИТЬ / ПОЛУЧИТЬ свои собственные файлы и атрибуты каталогов от нашего партнера JCG Мохамеда Тамана в блоге « Улучшите свою жизнь с помощью науки и искусства» . |