Arhive JAR (Java ARchive)
Definitie
Sunt arhive īn
format ZIP folosite pentru compresarea mai multor fisere īn unul singur.
Diferenta consta īn faptul ca un fisier JAR contine, pe lānga fiserele
arhivate, si un director denumit META-INF, ce contine diverse informatii
auxiliare.
Un fisier JAR poate fi creat folosind
utilitarul jar sau metode ale
pachetului java.util.jar.
Beneficii
- portabilitate - este singurul format
de arhivare independent de platforma
- compresarea fisierelor est
optimizata pentru fisiere de tip class
- minimizarea timpului de incarcare a
unui applet : daca appletul (fisiere class, resurse, etc) este compresat
intr-o arhiva jar, el poate fi incarcat intr-o singura tranzactie HTTP,
fara a fi deci nevoie de a se deschide o conexiune noua pt. fiecare
fisier.
- securitate - arhivele JAR pot fi
"semnate" electronic
- mecanismul pentru lucrul cu fisiere
JAR este parte integrata a platformei Java.
Folosirea utilitarului jar
Arhivatorul jar se gaseste īn subdirectorul
bin al directorului īn care este instalat mediul Java. In tabelul de
mai jos sunt sumarizate operatiile principale:
Operatie
|
Comanda
|
Crearea unei arhive
|
jar cf
nume-arhiva fisier(e)-intrare
|
Vizualizare continutului unei arhive
|
jar tf
nume-arhiva
|
Extragerea continutului unei arhive
|
jar xf
nume-arhiva
|
Extragerea doar a unor fisiere dintr-o
arhiva
|
jar xf
nume-arhiva fisier(e)-arhivate
|
Executarea unei aplicatii īmpachetate
īntr-un fisier jar ( JDK 1.1)
|
jre -cp
app.jar ClasaPrincipala
|
Executarea unei aplicatii īmpachetate
īntr-un fisier jar ( JDK 1.2)
Alicatia trebuie compresata in asa fel incat interpretorul sa stie unde se
gaseste clasa principala
|
java -jar
app.jar
|
Deschiderea īntr-un browser a unui applet
compresat īntr-un fisier jar
| <applet code=NumeClasaApplet.class archive="NumeArhiva.jar" width=latime height=īnaltime> </applet> |
Exemple:
- arhivarea a doua fisiere class: jar cf classes.jar A.class B.class
- arhivarea tuturor fisierelor din
directorul curent: jar
cvf allfiles.jar * 717g61h
Executarea aplicatiilor īmpachetate īntr-o arhiva JAR
Pentru a rula o aplicatie īmpachetata
īntr-o arhiva JAR trebuie sa facem cunoscuta interpretorului numele clasei
principale a aplicatiei. Sa consideram urmatorul exemplu, īn care dorim sa
arhivam clasele : GraphEditor.class,
Graph.class, Edge.class, Vertex.class , clasa
principala fiind GraphEditor. Vom scrie:
jar cvfm editor.jar *.class
In urma acestei comenzi vom obtine arhiva editor.jar.
Daca vom īncerca sa lansam īn executie aceasta arhiva prin comanda java -jar editor.jar vom obtine urmatoarea eroare:
"Failed to load Main-Class manifest from editor.jar"
. Aceasta īnseamna ca īn fiserul Manifest.mf ce
se gaseste īn directorul META-INF trebuie sa īnregistram clasa principala a aplicatiei. Acest lucru
īl vom face īn doi pasi:
- se creeaza un fisier cu un nume
oarecare (ex: mymanifest ) īn care vom scrie:
Main-Class :
GraphEditor.java
- adaugam aceasta completare la
fisierul manifest al arhivei editor.jar:
jar cvfm editor.jar
mymanifest
Ambele operatii puteau fi executate īntr-un
singur pas:
jar cvfm editor.jar mymanifest *.class
Fisiere JAR executabile
Pe sistemele Win32, platforma Java 2 va
asocia extensiile .jar cu interpretorul java, ceea ce īnseamna cs facānd
dublu-click pe o arhiva jar va fi lansata īn executie aplicatia īmpachetata īn
acea arhiva (daca exista o clasa principala).
- Sa se scrie o aplicatie Java care
afiseaza numerele de la 0 la 255 si caracterele UNICODE corespunzatoare.
Numerele se vor afisa pe linii separate cu o pauza de t
milisecunde intre doua afisari ( t va fi primit ca
argument de la linia de comanda, in caz contrar va fi considerat ca avānd
valoarea implicita 100). La fiecare 21 de linii se va opri afisarea si se
va afisa mesajul : "Apasati Enter..."
- Pentru a face o
pauza in executia procesului curent se va folosi metoda sleep
din clasa Thread
- Pentru a opri
momentan executia folositi secventa:
o System.in.read();
o System.in.skip(System.in.available());
- Scrieti un program
Java care rezolva ecuatia de gradul 2 cu coeficientii a, b, c
primiti ca argumente de la linia de comanda. Programul trebuie sa trateze
toate situatiile care pot aparea.
- Sa se scrie o aplicatie Java care :
- genereaza un
vector de n numere intregi cuprinse in intervalul [a,b],
unde a,b si n sunt primite ca argumente de la linia de comanda
- sorteaza vectorul
generat folosind, pe rand, algoritmul BubbleSort si
metoda sort din clasa Arrays
- afiseaza timpii
estimativi de executie pentru fiecare din procedee
Pentru aflarea timpului necesar executie unei secvente de cod se va
folosi metoda currentTimeMillis din clasa System
Consultati documentatia API pentru a afla
informatii suplimentare despre metodele folosite!
- Implementati clasa Stiva, care sa
simuleze o lista LIFO de obiecte oarecare (stiva eterogena). Clasa trebuie
sa aiba urmatoarele metode:
- empty : testeaza
daca stiva este vida
- peek : returneaza
elementul din varful stivei, fara a-l elimina din stiva
- pop : returneaza
elementul din varful stivei si il elimina din stiva
- push : adauga un
element in stiva
- search : cauta un
element in stiva si returneaza distanta sa fata de varful stivei,
respectiv 0 daca acesta nu este gasit.
- toString :
returneaza continutul stivei sub forma unui sir de caractere
Tipul de date al obiectelor din lista va fi Object !
Nu se vor folosi clase ajutatoare cum ar fi Stack, Vector, etc !
- Definiti si implementati clasa Rational, care sa
permita lucrul cu numere rationale. Clasa va contine metodele uzuale.
- Scrieti o aplicatie care sa
gestioneze angajatii unei companii. Informatiile care vor trebui memorate
pentru fiecare angajat sunt: cod,
nume, salar, data angajarii, adresa, telefon. Programul trebuie sa
permita:
- adaugarea unui nou
angajat
- modificarea
informatiilor despre un angajat existent
- stergerea unui
angajat
- listarea angajatilor
curenti
- cautarea unei
persoane dupa nume sau cod
Folositi o clasa pentru descrierea "obiectelor" de tip angajat.
- Scrieti un program care sa simuleze
un 'shell' pentru lucrul cu fisiere. Aplicatia trebuie sa permita:
- listarea
fisierelor dintr-un director sau directorul curent
- listarea
continutului unui fisier
- schimbarea
directorului curent
- crearea unui nou
director
- stergerea/redenumirea
unui fisier/director
- concatenarea a
doua sau mai multor fisiere
- aflarea
informatiilor despre un fisier/director
Comenzile vor fi citite de la tastatura impreuna cu argumentele lor sau vor fi
alese printr-un meniu.
- Sa se implementeze
clasa ArboreBinar care sa permita crearea, modificarea si
parcurgerea(explorarea) unui arbore binar. La parcurgerea arborelui, in
fiecare nod trebuie sa se execute prelucrarea informatiei din el prin
intermediul unei functii primite ca parametru. (exemple de functii:
afisarea informatiei din nod in diferite formate)
- Scrieti un program care cauta
intr-un anumit director si, recursiv, in toate subdirectoarele sale
fisiere cu extensia .java care contin un anumit text. Directorul in care
se face cautarea si textul cautat vor fi primite ca argumente de la linia
de comanda sau citite de la tastatura.
Pentru aflarea fisierelor dintr-un director care au o anumita extensie
folositi metoda list din clasa File si interfata FilenameFilter
- Sa se scrie un
program care citeste de la tastatura doua multimi de numere īntregi si
afiseaza reuniunea, intersectia, diferenta simetrica si produsul cartezian
pentru multimile respective.
Folositi clasa HashSet pentru reprezentarea multimilor.
- Scrieti o aplicatie care gestioneaza
un mini-dictionar romān - englez. Programul trebuie sa permita adaugarea,
stergerea de definitii, salvarea dictionarului pe disc, respectiv
incarcarea acestuia in memorie.
Folositi clasa HashMap pentru reprezentarea dictionarului.
Folositi serializarea pentru salvarea/restaurarea dictionarului.
- Sa se scrie un program care afiseaza
o fereastra pe suprafata careia sa se regaseasca urmatoarele tipuri de
componente: Label,
Button, Checkbox, Choice, List, Scrollbar, TextField, TextArea. Pentru fiecare componenta tratati cel putin unul din
evenimentele pe care le poate genera.
- Sa se scrie un program care permite
afisarea de imagini. Imaginile vor fi alese din fisiere aflate local prin
intermediul unui dialog cu utilizatorul. La afisarea unei imagini se va
specifica daca imaginea va fi scalata la dimensiunile suprafetei de
afisare sau va fi afisata integral.
Folositi clasa JFileChooser pentru alegerea unui fisier imagine.
Incapsulati suprafata de desenare intr-un obiect de tip JScrollPane
pentru a putea afisa imagini mai mari decāt dimensiunile suprafetei de desenare
fara a face scalarea imaginii
- Sa se scrie un program care sorteaza
concurent un vector de numere īntregi generate aleator īntr-un interval
oarecare, folosind doua metode de sortare diferite (BubbleSort si QuickSort).
Cele doua metode de sortare vor fi implementate ca fire de executie pentru
a putea fi executate concurent. Pe parcursul sortarii se vor afisa in
permanenta vectorii partial sortati pentru fiecare metoda. Programul va
avea interfata grafica.
Dati o reprezentare grafica sugestiva vectorilor īn care fiecare element
sa fie reprezentat printr-o linie de lungime egala cu valoarea
elementului.
- Sa se scrie un program care permite
afisarea de imagini. Imaginile vor fi alese din fisiere aflate local prin
intermediul unui dialog cu utilizatorul. La afisarea unei imagini se va
specifica daca imaginea va fi scalata la dimensiunile suprafetei de
afisare sau va fi afisata integral.
Folositi clasa FileDialog pentru alegerea unui fisier imagine.
Incapsulati suprafata de desenare intr-un obiect de tip ScrollPane
pentru a putea afisa imagini mai mari decāt dimensiunile suprafetei de desenare
fara a face scalarea imaginii.
Sortare rapida (quick sort) Ideea : sortez un tablou a[p..q] : DIVIDE ET IMPERA - Baza : q=p => a[p..q] sortat - Pas de divizare : determina prin interschimbari un indice k a.ī.: p <= k <= q;
pt orice i, p <= i <= k ----> a[i] <= a[k];
pt orice j, k < j <= q ----> a[k] >= a[j];
Indicele k se numeste PIVOT
- Rezolva recursiv subtablourile: a[p..k-1], a[k+1,q] Complexitate medie: O(nlogn);
Scrieti un program
client-server care sa permita īnregistrarea unor utilizatori. Programul de tip
client va trimite catre server urmatoarele informatii: nume, e-mail, parola, serverul va verifica daca nu exista un alt
utilizator cu acelasi nume si, īn caz afirmativ, va īnregistra noul utilizator.
Serverul va trimite un mesaj catre fiecare client care a facut o cerere cu
confirmarea sau infirmarea īnregistrarii acestuia.
Programul server va mai permite listarea tuturor utilizatorilor īnregistrati si
stergerea unora dintre acestia .
- Scrieti un applet care sa deseneze
un cerc ce se deplaseaza pe orizontala sau verticala īn interiorul unui
dreptunghi.Initial cercul va porni īntr-o directie aleatoare. La impactul
cu fiecare din marginile dreptungiului cercul va reveni īninteriorul
acestuia, schimbāndu-si directia.
Diametrul mingii si viteza de deplasare vor avea valori initiale primite
ca parametri dar vor putea fischimbate si prin program.
- Creati un applet care sa permita
introducerea unui utilizator (nume, parola) si a unei adrese web dupa care
sa deschida pagina referita intr-o noua instanta a browserului.
Informatiile introduse vor fi memorate intr-un fisier. Appletul va mai
oferi posibilitatea de a realiza o statistica a adreselor vizitate de un
anume utilizator.
- Creati o baza de date care sa
contina doua tabele judete si localitati. Tabelul judete va contine coloanele cod, nume iar tabelul localitati va avea coloanele cod, nume, cod_judet . Scrieti o
aplicatie Java care sa permita urmatoarele operatii:
- adaugarea,
stergerea unui judet sau localitate
- listarea
localitatilor unui judet
- Scrieti o aplicatie de tip SQL
Manager care sa permita conectarea la o baza de date, introducerea de
comenzi SQL si afisarea rezultatelor. Afisarea rezultatelor se va face
prin intermediul unor tabele - fiecare interogare va afisa rezultatul
intr-o fereastra seperata (folositi clasele JFrame, JInternalFrame, JTable
- Creati o aplicatie de tip
"browser" de clase care sa permita navigarea prin fisierele cu
extensia .class si sa afiseze, in situatia cand fisierul reprezinta o clasa
java, informatii despre clasa respectiva (modificatori, nume, superclasa,
interfete implementate, variabile membre, constructori, metode).