|
|||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
bootable [55]
commercial [7] no-commercial [42] unclassified [20] [7]
Software (10844)
|
Java a rozšířené atributy souborůJava ve své sedmé verzi přinese řadu zajímavých vlastností.
Jednou z nich je i podpora práce s rozšířenými atributy souborů,
což je funkcionalita poskytovaná souborovým systémem,
která umožňuje k souborům ukládat metadata.
V dnešním článku si povíme obecně o rozšířených atributech
a ukážeme jak s nimi snadno pracovat v Javě (díky OpenJDK 7).
Co jsou rozšířené atributyRozšířené atributy jsou funkcí souborového systému (např. ext2, ext3, ext4, JFS, ReiserFS, XFS a Btrfs) a umožňují nám k souborům ukládat metadata ve formě klíč-hodnota. Můžeme si tak k souborům přidávat různé popisy, poznámky nebo třeba uvést kódování znaků. A to vše bez ohledu na interní formát daného souboru a jeho možnosti. Výhoda oproti metadatům uvnitř souborů: formáty jako např. MP3, JPEG a řada dalších umožňují ukládat metadata přímo do souboru (např. název písničky nebo datum vyfocení). Každý formát má ale vlastní způsob zápisu metadat a pro práci s nimi obvykle potřebujeme nějakou speciální knihovnu. Rozšířené atributy oproti tomu přinášejí standardní API pro práci s metadaty, které je nezávislé na konkrétním formátu. Např. název, autora nebo kódování si přečteme vždy stejným způsobem, ať už se jedná o písničku, obrázek nebo třeba textový dokument. Výhoda oproti metadatům ve zvláštních souborech: metadata můžeme ukládat mimo vlastní soubor, to se používá třeba v případě kontrolního součtu nebo elektronického podpisu. Vždy musíme dávat pozor, abychom přenesli oba (všechny) soubory a nezapomněli je také správně přejmenovat. S rozšířenými atributy se nám to nestane, tam jsou metadata a vlastní soubor nerozlučně spjaty a při přesouvání nebo přejmenování nemusíme nic řešit – metadata se nám neztratí. Nevýhoda: rozšířené atributy musí být podporované daným souborovým systémem. Když soubory nahrajeme třeba na disketu nebo flashku s nějakým primitivním FS, o metadata bohužel přijdeme. Totéž by se dalo říct o přenosech po síti. Jenže tam je situace spíš opačná – při přenosu souborů po HTTP nebo e-mailem (SMTP a MIME) se např. informace o MIME typu souboru nebo jeho kódování úspěšně přenáší (pomocí hlaviček příslušných protokolů/formátů) a ztratí se často až ve chvíli uložení souboru na disk. Proto je důležité si rozšířené atributy zapnout a používat je.
Abychom rozšířené atributy mohli používat, zkontrolujeme si v souboru
Nejvíce nás budou asi zajímat uživatelské atributy,
ty se nacházejí ve jmenném prostoru
Pro vyzkoušení rozšířených atributů si nainstalujeme nástroj pro příkazovou řádku: balíček Rozšířené atributy podporuje i program curl – pomocí příkazu: curl http://www.linuxsoft.cz/ --xattr --output ls.html si stáhneme stránku z webu a curl nám k souboru přidá dva rozšířené atributy:
To je velice užitečné, protože často se stává, že si stáhneme nějaké materiály z webu a pak zapomeneme, odkud to bylo a později pracně hledáme původní zdroj. U kódování bývá podobný problém – zatímco při načítání z webu prohlížeč zjistí kódování z HTTP hlaviček, při načítání z disku tyto hlavičky chybí a prohlížeč musí kódování buď uhádnout, nebo ho hledat uvnitř souboru. Pro program wget existují minimálně dva patche: jeden napsal Petr Písař a druhý Stefan Tomanek takže i při stahování tímto programem si můžete ukládat rozšířené atributy. Standardy a doporučeníAbychom se vzájemně domluvili a nepoužíval každý svoje vlastní nekompatibilní názvy atributů, je dobré dodržovat nějaké konvence. Freedesktop.org radí, aby atributy specifické pro konkrétní aplikaci obsahovaly předponu – např.: user.nějakáMojeAplikace.nějakýAtribut = "hodnota atributu" Tím se předejde konfliktům v názvech. Pak existují společné atributy používané různými programy:
a navržené atributy jako jsou:
a další. Kromě toho můžeme autributy pojmenovat podle standardu Dublin Core – např.:
Simple Dublin Core Metadata Element Set definuje celkem 15 elementů. Jak vidíme, možností je spousta. Pro začátek bude dobré ukládat k souborům alespoň jejich MIME typ a kódování znaků. Práce s rozšířenými atributy v JavěV současné době se chystá sedmá verze Javy, resp JDK 7, ve které bude spousta zajímavých novinek. Kromě jiného se můžeme těšit i na JSR 203: More new I/O APIs for the Java platform (NIO.2) A nemusíme se jen těšit, můžeme ho rovnou používat – vývojové verze OpenJDK 7 už jsou poměrně dost funkční.
V novém API se setkáváme s abstraktní třídou File soubor = new File("/cesta/k/souboru.txt"); Path cesta = soubor.toPath(); Nebo si vytvoříme cestu rovnou: Path cesta = Paths.get("/cesta/k/souboru.txt");
Jakmile máme instanci UserDefinedFileAttributeView pohled = cesta.getFileAttributeView(UserDefinedFileAttributeView.class);
Protože jsme zvolili List<String> jménaAtributů = pohled.list(); Hodnoty jednotlivých atributů si načteme přes for (String jménoAtributu : jménaAtributů) { ByteBuffer hodnotaAtributu = ByteBuffer.allocate(pohled.size(jménoAtributu)); pohled.read(jménoAtributu, hodnotaAtributu); System.out.println(jménoAtributu + " = " + dekóduj(hodnotaAtributu)); } Pro převod bajtů na text použijeme následující metodu: private static String dekóduj(ByteBuffer bajty) { bajty.flip(); return Charset.defaultCharset().decode(bajty).toString(); } Zápis atributu je opět jednoduchý – jen musíme zase převést textovou hodnotu zpátky na bajty: pohled.write("názevAtributu", zakóduj("hodnota atributu")); Kompletní funkční příklad najdete ve zdrojových kódech ukázkové aplikace – viz níže. Toto API využijeme např. když budeme programovat souborové servelety – pak nemusíme MIME typ hádat podle přípony nebo prvních bajtů v souboru a jednoduše si ho přečteme z atributů (za předpokladu, že je tam uložený, samozřejmě). Nebo když budeme vyvíjet nějaký CMS – budeme mít metadata a soubory těsně spjaté a nebudeme muset řešit synchronizaci a referenční integritu mezi databází a souborovým systémem. Rozšířené atributy můžeme využít i k ošetření přístupových práv na úrovni aplikace – např. můžeme soubory označovat podle stupně utajení a aplikace je pak bude poskytovat jen uživatelům s příslušným pověřením. Možnostem využití se meze nekladou a záleží jen na vaší fantazii, co na téhle technologii postavíte. Ukázková aplikace: rozsirene-atributyVytvořil jsem jednoduchou GUI aplikaci, která umožnňuje zobrazovat a měnit rozšířené atributy souborů. Stáhnout si ji můžete z mého mercurialu příkazem: hg clone http://hg.frantovo.cz/rozsirene-atributy/ a potom přeložit pomocí antu. Jediné, co potřebujete je OpenJDK 7. Aplikace byla vyvinuta a testována s touto verzí: java version "1.7.0-ea" Java(TM) SE Runtime Environment (build 1.7.0-ea-b103) Java HotSpot(TM) 64-Bit Server VM (build 19.0-b04, mixed mode) Program se spouští takto: rozšířené-atributy.sh název_souboru.txt
Atributy můžete přidávat nebo mazat. Změny se provádějí hned, co ukončíte editaci příslušné buňky v tabulce. Poznámka: protože se nejedná o žádnou kritickou aplikaci, rozhodl jsem se ji zneužít k jednomu experimentu. Podle Java Language Specification – 3.8 Identifiers se nemusíme omezovat jen na ASCII znaky, proto jsou všechny názvy tříd a metod v tomto programu psané česky a to včetně háčků a čárek. „Letters and digits may be drawn from the entire Unicode character set, which supports most writing scripts in use in the world today, including the large sets for Chinese, Japanese, and Korean. This allows programmers to use identifiers in their programs that are written in their native languages.“ A vypadá to, že to skutečně funguje. Jestli chcete pomoci, otestujte program na své platformě a dejte vědět, jak to šlo. ZávěrDnešní článek měl dva cíle – jednak udělat osvětu rozšířeným atributům a jednak ukázat, jak snadno se s nimi pracuje (nebo bude pracovat) v nové verzi Javy. Odkazovaná GUI aplikace je svobodný software pod GNU GPL licencí. Je myšlena primárně jen jako ukázka nového API, ale třeba někomu bude k užitku. Zmínili jsme i standard pro metadata Dublin Core, který se vám může hodit nezávisle na souborových atributech – můžete ho využít třeba v XHTML. Odkazy a zdroje
Related article
Programování v jazyku Java (1) - Úvod Programování v jazyku Java (2) - instalace, překlad a spouštění Programování v jazyku Java (3) - Základy syntaxe Programování v jazyku Java (4) - Proměnné a operace s nimi Java (5) - Řízení programu Programování v jazyku Java (6) - Řetězce I Programování v jazyku Java (7) - Řetězce II Programování v jazyku Java (8) - Pole I Programování v jazyku Java (9) - Pole II Java (10) - Kontejnery I. Java (11) - Kontejnery II. Java (12) - Kontejnery III. Java (13) - JDK, vývojová prostředí Java (14) - štábní kultura, specifika Java (15) - I/O operace I. Java (16) - I/O operace II. Java (17) - práce se soubory Java (18) - síťová komunikace I. Java (19) - síťová komunikace II. Java (20) - vlákna Java (21) - datové typy Java 5 - recenze knihy Java (22) - omezování práv I. Java (23) - omezování práv II. Java (24) - úvod do grafiky a GUI Java (25) - základní grafické třídy Java (26) - tvorba GUI Java (27) - seznamy, stromy, tabulky Java (28) - renderery a editory Java (29) - správci rozložení Java (30) - Look and Feel Java (31) - základy tisku Java (32) - tiskové služby BlueJ IDE JavaFX - prostředí pro tvorbu RIA aplikací (1) JavaFX - prostředí pro tvorbu RIA aplikací (2) Previous Show category (serial) Next
|
Szukanie oprogramowania
|
|||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |