Java - práce s archivem
Dobrý den,
Mám frame a na něm tlačítko a skrytý textbox
Po zpracování kódu níže potřebuji detekovat, že archiv je zaheslovaný. Pokud ano, tak se ten textbox zobrazí a do něho zadám heslo a archiv se odemkne.
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Cat", "zip"));
int i = fileChooser.showOpenDialog(null);
if (i == JFileChooser.APPROVE_OPTION) {
}
Jenže s archivy jsem nikdy nepracoval a nemám tušení, jak to udělat. Prosím o radu.
Předem díky za odpověď
Samotná Java to nejspíš neumí. Koukni na tohle: download.php
yes, zip4j is way to go...
Děkuji. Už jsem ho našel dřív, akorát jsem se nebyl jistý, jestli mám použít zrovna tenhle.
Každopádně pomocí tohohle kódu extrahuji soubor do dané složky.
try {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Archiv", "zip"));
int i = fileChooser.showOpenDialog(null);
if (i == JFileChooser.APPROVE_OPTION) {
ZipFile zipFile = new ZipFile(fileChooser.getSelectedFile().getAbsoluteP ath());
if (zipFile.isEncrypted()) {
zipFile.setPassword(jTextField1.getText());
}
zipFile.extractAll("c:\\ZipTest");
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
Jedinou věc, kterou bych ještě potřeboval, je ověřit, jestli zadané heslo je správné.
Díky.
Při dekompresi dostaneš ZipException s kódem 5.
Když zadám špatně heslo, tak to vyhodí
net.lingala.zip4j.exception.ZipException: net.lingala.zip4j.exception.ZipException: Wrong Password for file: ...
Prostě nechci, aby to skočilo do catch, ale obejít to nějakou podmínkou.
Nebo neco nechapu?
Tohle je dobře, ale já nechci, aby se mně to při zadání špatného hesla dostalo do catch, ale jenom aby se splnila nějaká podmínka.
Něco ve stylu tohohle
try {
int pole[] = {0,1,2,3,4,5};
for (int i = 0; ; i++) {
pole[i] = 10 * i;
}
} catch (Exception e) {
}
Cyklus bude běžet, dokud i bude 5. Jakmile budu chtít 6. prvek pole, tak to vyhodí chybu.
Stačí ale, abych upravil cyklus na for (int i = 0; i < pole.length ; i++) a chyba už nenastane.
Ten tvůj kód je první příklad, při chybě skočí do catch, ovšem já to potřebuji upravit tak, aby při špatném hesle se splnila nějaká podmínka a do catch se to nedostalo.
Tak to si to budeš muset přepsat ve zdrojácích toho zip4j.
To vážně nemá žádnou metodu, která vrací true nebo false podle toho, jestli je zadané heslo správné? To mně přijde absurdní. Ještě jsem se nesetkal s chybou, která by nešla obejít nějakou podmínkou. Navíc to nevypadá na amatérsky napsanou knihovnu. Jde tam udělat první poslední a není tam testovací metoda pro heslo?
Měl jsem raději hned na začátku uvést příklad
try {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Archiv", "zip"));
int i = fileChooser.showOpenDialog(null);
if (i == JFileChooser.APPROVE_OPTION) {
ZipFile zipFile = new ZipFile(fileChooser.getSelectedFile().getAbsoluteP ath());
if (zipFile.isEncrypted() && zipFile.x(jTextField1.getText()) == true) {
zipFile.extractAll("c:\\ZipTest");
}
}
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
ZipFile.x - jméno metody, která otestuje, jestli lze zadaným řetězcem archiv odemknout. (Pokud teda taková metoda existuje)
1) Můžeš si napsat svou knihovnu
2) Proč ti vadí catch? Budeš snad louskat miliony archivu za sekundu?
3) To je úplně běžné že vrací nějaký stav
4) Nenašel jsi dokuemtaci?
5) Používej kurva ten tag code, kdo to má louskat.
6)
Jenom jsem se slušně, takže jestli si jsem přišel jenom mně nadávat, tak laskavě běž obtěžovat někoho, kdo si to zaslouží.
kde ti nadavam?
Jde otevřít pro debilky - to není nadávání?
JaLemu asi vyrostl hrebinek, pritom vi o jave v podstate hovinko.
Ne, jen se chovam jako vetsina radcu tady v te poradne.
Ano nejsem profik, za to se nestydim.
Ale za tich par let, co se ji venuji, tak uz neco vim.
Ne.
Už jsem to vyřešil jinak, do catch jsem zavolal znova tu samou metodu.
Wut? :)
Zip4j bohuzel neumi, otestovat jestli je heslo spravne, bez toho aniž by se pokusil archiv rozbalit.
Dalo by se to udelat takto, ale je to kapku o nicem, pac se to bude rozbalovat na disk, kdyz bude heslo spravne. Muzes si ale po sobe uklidit.