Este - arhivă

Ești nou pentru a lucra cu fișiere de borcan? Această clasă vă va ajuta!

Cei mai mulți programatori Java sunt conștienți de avantajele utilizării jar-fișier pentru a lega împreună toate resursele (de exemplu, fișierele de clasă, sunete și imagini) care alcătuiesc soluția în Java. (Dacă nu sunteți familiarizați cu fișierele jar, consultați secțiunea "Resurse" de mai jos.). Cei care tocmai au început să includă fișiere cu jar în setul de unelte folosite, vă pun foarte des întrebarea cum puteți extrage imaginea din fișierul de jar. Vom răspunde la această întrebare și vom da o clasă care face extrem de ușor să extrageți orice resursă din fișierul de jar!

Încărcarea unei imagini GIF

Să presupunem că avem un fișier jar care conține multe fișiere cu imagini GIF pe care dorim să le folosim în aplicația noastră. Iată cum putem accesa fișierul imagine dintr-un fișier jar folosind JarResources:

Acest fragment de cod arată că putem crea un obiect JarResources. inițializat pe baza fișierului cu jar conținând resursa, a cărei utilizare ne interesează, - Images.jar. Apoi vom folosi metoda getResource () din JarResources. pentru a obține datele originale din fișierul logo.gif pentru metoda createImage () din biblioteca AWT.

Notă privind numele

JarResource este un exemplu destul de simplu de utilizare a diferitelor instrumente Java 1.1 pentru a manipula arhivele jar și zip.

O scurtă notă despre nume. Suportul pentru arhivarea în Java a fost de fapt început folosind formatul popular de arhivă zip (Consultați "Sfat Java: Utilizarea fișierelor de arhivă pentru a accelera descărcarea de aplicații"). Deci, inițial atunci când suportul Java pentru fișiere de arhivă, toate clasele și așa mai departe au fost plasate în pachetul java.util.zip; aceste clase încep de obicei cu "Zip". Dar undeva pe drumul către Java 1.1, sa decis să se schimbe numele arhivei cu cel legat direct de Java. Prin urmare, ceea ce numim acum fișiere de jar, în esență - fișiere zip.

Cum funcționează

Câmpurile importante de date pentru clasa JarResources sunt folosite pentru a urmări și a stoca conținutul fișierului jar specificat:

De exemplu, atunci când este creată o instanță de clasă, numele fișierului jar este setat și apoi este apelată metoda init (). care face tot munca:

Metoda init () încarcă pur și simplu conținutul fișierului jar specificat în hashtable (accesat de numele resursei).

Aceasta este o metodă destul de greoaie, deci să o împărțim. Clasa ZipFile ne oferă acces de bază la informațiile de antet ale arhivei jar / zip. Acest lucru este similar cu informațiile din directorul din sistemul de fișiere. Aici obținem o enumerare a tuturor elementelor din ZipFile și creăm un htSizes numit hashtable cu mărimea fiecărei resurse din arhivă:

Apoi accesăm arhiva folosind clasa ZipInputStream. Clasa ZipInputStream ne oferă tot ceea ce aveți nevoie pentru a citi fiecare resursă din arhivă. Am citit numărul exact de octeți din arhiva care cuprind fiecare resursă și stochează aceste date într-un hashtable htJarContents numit cu acces pentru numele resursei:

Rețineți că numele utilizat pentru a identifica fiecare resursă este calea către resursa în arhivă, și nu, de exemplu, numele clasei în pachet - adică, clasa pachetului ZipEntry java.util.zip ar trebui să fie numit „java / UTIL / zip / ZipEntry“ . nu "java.util.zip.ZipEntry".

Partea finală importantă a codului este testul de conducere. Aceasta este o aplicație simplă care ia numele arhivei jar / zip și numele resursei. Apoi încearcă să găsească o resursă în arhivă și raportează succesul sau eșecul:

Acum aveți o clasă care facilitează utilizarea resurselor ambalate în fișierele de jar.

Exerciții pentru cititor

Acum că știți cum să extrageți resurse din arhivă, iată câteva direcții pe care le puteți explora prin schimbarea și extinderea clasei JarResources:

  • În loc să descărcați tot conținutul în timpul construcției, faceți o descărcare amânată. Dacă fișierul jar este mare, este posibil să nu existe suficientă memorie pentru a încărca toate fișierele în timpul construcției.
  • În loc de o metodă generală de acces simplu, cum ar fi getResource (). am putea oferi metode specifice de acces care corespund anumitor resurse, de exemplu, getImage (). care returnează un obiect Java Image. getClass (). care returnează un obiect Java Class (folosind un clasificator personalizat) și așa mai departe. Dacă fișierul de jar este suficient de mic, am putea să colectăm mai întâi toate resursele bazate pe extensiile lor (clasa .gif etc.).
  • Unele metode ar putea oferi informații cu privire la maximum acest borcan-fișier (de fapt un înveliș în jurul valorii de zipfile), inclusiv: numărul de intrări borcan / zip; enumerator care returnează toate denumirile de resurse; Metode de acces care returnează lungimea (și alte atribute) ale unui eveniment individual; Metoda de acces care vă permite să creați un index și altele.
  • JarResources pot fi extinse pentru a fi utilizate de applet-uri. Utilizând parametrii de applet și clasa URLConnection. conținutul fișierelor jar poate fi descărcat din rețea și nu se deschide arhivele ca fișiere locale. În plus, putem extinde această clasă ca un specialist specializat în conținut Java.

concluzie

Dacă doriți să învățați cum să extrageți imagini din fișiere de jar, acum ați învățat acest lucru. Cu ajutorul unei clase noi nu puteți doar să procesați imagini în fișiere jar, ci și să extrageți toate resursele din jar-arhive.

Arthur Choi lucrează în prezent la IBM ca consultant programator. A lucrat pentru mai multe companii, printre care SamSung Network Laboratory și MITER. Diferitele proiecte pe care a lucrat au fost sisteme client-server, computere distribuite și managementul rețelei. A folosit multe limbi în diferite sisteme de operare. A început programarea în 1981 cu FORTRAN IV și COBOL. Mai târziu, sa mutat în C și C ++ și, de asemenea, a lucrat timp de aproximativ doi ani cu Java. În sfera intereselor sale, practic, aplicațiile Java în băncile de date bazate pe rețele globale și computerele paralele și distribuite prin Internet (folosind programarea de agenți).