Hilfe bei ZIP-import benötigt

Status
Nicht offen für weitere Antworten.
D

Devilmarkus

Gast
Hallo zusammen,
wer kann mir hilfreich zur Seite stehen?

Mein Problem bezieht sich auf das Lesen von ZIP-Dateien.

Bei ZIPs mit nur einer Datei funktioniert das ja soweit ganz gut.

Allerdings möchte ich dem User die Möglichkeit geben, wenn sich in einem ZIP mehrere Dateien befinden, auswählen zu können, welche geladen werden soll.

Hier mein aktueller Code:
Code:
  public final InputStream openFile(String name) throws Exception {
    System.out.println("File: " + name);
    InputStream result;

   if (name.toLowerCase().endsWith(".zip")) {
          ZipEntry entry;
          ZipInputStream str = new ZipInputStream(result);
            while((entry = str.getNextEntry()) != null) {
                 zipcount++;
                String EntryName = entry.getName().toLowerCase();
                if(     EntryName.endsWith(".dsk")||        // amstrad diskimage
                        EntryName.endsWith(".cdt")||        // amstrad tape
                        EntryName.endsWith(".bin")||        // amstrad binary
                        EntryName.endsWith(".bas")||        // amstrad basic
                        EntryName.endsWith(".cpr")||        // amstrad + cartridge
                        EntryName.endsWith(".sna")||        // amstrad snapshot
                        EntryName.endsWith(".z80")||        // spectrum snapshot
                        EntryName.endsWith(".o")  ||        // zx 81 snapshot
                        EntryName.endsWith(".p")  ||        // zx 80 snapshot
                        EntryName.endsWith(".vsf")||        // vice snapshot (c64)
                        EntryName.endsWith(".tzx")||        // spectrum tape
                        EntryName.endsWith(".rom")||        // rom (general)
                        EntryName.endsWith(".ssd")||        // bbc diskimage
                        EntryName.endsWith(".fnt")||        // bbc font
                        EntryName.endsWith(".vz") ||        // vz 200/300 snapshot
                        EntryName.endsWith(".chr")||        // vz 200/300 chars
                        EntryName.endsWith(".wav")          // PCM .wav file
                        )
                {
                    System.out.println("Reading " + entry.getName());
                    return str;
                }
                else
                    System.out.println("Skipping " + entry.getName());
            }
          System.out.println("ZIP entries:" + zipcount);
          zipcount = 0;
   }


    return result;
  }

Hierbei handelt es sich NICHT um eine Haus- oder Prüfungsaufgabe, sondern soll meinen Emulator verbessern.

Deshalb nutzt mir leider auch wenig ein Hinweis auf JAVA-Handbücher oder ähnliches.

Ich habe schon einiges an entsprechenden Quellen durchforstet, bin aber leider noch nicht dahinter gekommen, wie ich dieses nun Bewerkstelligen kann.

Ist nur eine Datei in dem ZIP, soll diese einfach gelesen werden.
Sind 2 oder mehr Dateien in dem ZIP, sollte der User ein Fenster bekommen mit einer Auswahlliste für die einzelnen Dateien.

In der 'While - Schleife" habe ich schon versucht, einen Dialog einzubauen, ob die aktuelle Datei gelesen werden soll oder nicht. Aber irgendwie hat das nicht funktioniert.

(Abfrage per Dialogbox, ob geladen werden soll oder nicht,
Wenn ja: return str;
Wenn nein: setze While-Schleife fort..)

Ich wäre hier wirklich für jede Hilfe dankbar.

MfG
Markus
 

Daniel_L

Bekanntes Mitglied
Also, wenn du den Inhalt einer Zip-Datei auslesen möchtest, könntest du das so machen:
http://www.exampledepot.com/egs/java.util.zip/ListZip.html?l=rel

Am besten, du holst dir im ersten Durchgang alle Einträge in ein StringArray, oder eine (Linked)Liste und füllst dann die ComboBox mit den gefundenen Einträgen.

Nach der Auswahl gehst du wieder das ZIP-File durch, bis du den ausgewählten Eintrag gefunden hast, und liest den dann aus (vielleicht geht dieser Schritt auch einfacher...)
 
D

Devilmarkus

Gast
Daniel_L hat gesagt.:
Also, wenn du den Inhalt einer Zip-Datei auslesen möchtest, könntest du das so machen:
http://www.exampledepot.com/egs/java.util.zip/ListZip.html?l=rel

Am besten, du holst dir im ersten Durchgang alle Einträge in ein StringArray, oder eine (Linked)Liste und füllst dann die ComboBox mit den gefundenen Einträgen.

Nach der Auswahl gehst du wieder das ZIP-File durch, bis du den ausgewählten Eintrag gefunden hast, und liest den dann aus (vielleicht geht dieser Schritt auch einfacher...)

Hey, danke schonmal für diesen Hinweis.
Eventuell kannst Du mir anhand meines bereits bestehenden Codes ein Beispiel dafür geben?
Bin wirklich für jede Hilfe dankbar.

Ich kenne mich leider nicht sehr mit JAVA aus, entwickle aber einen Emulator weiter, welcher vom eigentlichen Programmierer eingestellt wurde, und fände es schade, wenn man den nicht mit noch mehr neuen Features bereichern könnte.

Gruss,
Markus

edit:
Ich kenne mich z.B. auch nicht mit ComboBoxen aus, mag diese auch nicht so sehr.

Wie ich mir das ganze Vorstelle, ein Beispiel hier:
example.png


Dies ist ein Dialog aus einem in C++ programmiertem Emulator.
Es wurde ein ZIP geöffnet, in dem sich mehrere '.dsk' Dateien befinden.
Hier kann der User nun wählen, welches geöffnet werden soll.
 

Daniel_L

Bekanntes Mitglied
Vor die while-Schleife ein
Code:
LinkedList<String> eintraege = new LinkedList<String>();

Dann in deinem Quelltext hinter der großen if-Abfrage statt:
Code:
                    System.out.println("Reading " + entry.getName()); 
                    return str;

ein
Code:
eintraege.add(EntryName);

Dann per Iterator alle Einträge in die combobox:
Code:
Iterator<String> i = eintraege.iterator();
jComboBox.removeAllItems();
while (i.hasNext()) jComboBox.add(i.next);

Dann würde ich den code oben wieder nehmen, aber als if-Abfrage dann:
Code:
if (EntryName.equals(jComboBox.getText(jComboBox.getSelectedIndex())...
und dann eben die ZIP-Datei laden...

so in etwa... ;-)
 
D

Devilmarkus

Gast
Hmmm... Wenn Du Interesse hast, mir dabei weiter behilflich zu sein, wäre es klasse, wenn wir uns eventuell im ICQ oder MSN austauschen können. Dann könnte ich Dir auch weitere Codes bereitstellen.

Einfach PM an mich ;-)
 

Daniel_L

Bekanntes Mitglied
Ich habe leider nur iChat. ;-) Abgesehen davon hab ich derzeit ziemlich viel zu tun (abseits von Programmieren, das ist nur ein Hobby) und ehrlich gesagt nicht so viel Lust, an anderen Projekten mitzuhelfen... Mehr als hier punktuell was schreiben kann ich zurzeit leider nicht.
 
D

Devilmarkus

Gast
Ja okay.
Ich bin gerade dabei, an diesem Code zu experimentieren.
Mal schauen, was dabei herauskommt.

Code:
while (i.hasNext()) jComboBox.add(i.next);
muss übrigens geändert werden:
Code:
while (i.hasNext()) jComboBox.addItem(i.next);

Die ComboBox have ich schon fertig. Dank Deiner Hilfe.
Nun muss ich es noch hinbiegen, dass diese Box nur erscheint, wenn mehr als 1 Datei in dem Zip sind.
Und ich muss noch implementieren, dass die gewählte Datei geladen wird.
*seufz*

Danke Dir trotzdem nochmal für Deine Hilfe.
 

Daniel_L

Bekanntes Mitglied
Du kannst mit "eintraege.size()" die Größe der Liste abfragen. Wenn diese 1 ist, umgehst du den Code mit der ComboBox.
 

Daniel_L

Bekanntes Mitglied
Und zum Laden einer Datei aus dem ZIP-File:
http://www.exampledepot.com/egs/java.util.zip/GetZip.html?l=rel

Nur, dass du statt "getNextEntry", das im Beispiel nur einmal aufgerufen wird und somit immer nur die erste Datei öffnet, eine while-Schleife einsetzt (wie in deinem Bespiel ganz oben).

Und dann eben immer Vergleichen, ob EntryName (das du über getNextEntry kriegst) gleich der Auswahl aus der ComboBox ist. Wenn ja, dann die Datei öffnen wie im obigen Beispiel beschrieben.
 
D

Devilmarkus

Gast
Viel Input auf einmal für mich... :-D

Aber ich habe es dennoch geschafft
(Auf meine Art, aber so funktioniert es, auch wenn es umständlich erscheint)
Code:
   public final InputStream openFile(String name) throws Exception {
    System.out.println("File: " + name);
    InputStream result;

   if (name.toLowerCase().endsWith(".zip")) { 
       checkZip(name);
          ZipEntry zipentry;
          ZipInputStream zipinput = new ZipInputStream(result);
            if (zipcount-rubbish <=1){
                while((zipentry = zipinput.getNextEntry()) != null) {
                    String EntryName = zipentry.getName().toLowerCase();
                    if( EntryName.endsWith(".dsk")||        // amstrad diskimage
                        EntryName.endsWith(".cdt")||        // amstrad tape
                        EntryName.endsWith(".bin")||        // amstrad binary
                        EntryName.endsWith(".bas")||        // amstrad basic
                        EntryName.endsWith(".cpr")||        // amstrad + cartridge
                        EntryName.endsWith(".sna")||        // amstrad snapshot
                        EntryName.endsWith(".z80")||        // spectrum snapshot
                        EntryName.endsWith(".o")  ||        // zx 81 snapshot
                        EntryName.endsWith(".p")  ||        // zx 80 snapshot
                        EntryName.endsWith(".vsf")||        // vice snapshot (c64)
                        EntryName.endsWith(".tzx")||        // spectrum tape
                        EntryName.endsWith(".rom")||        // rom (general)
                        EntryName.endsWith(".ssd")||        // bbc diskimage
                        EntryName.endsWith(".fnt")||        // bbc font
                        EntryName.endsWith(".vz") ||        // vz 200/300 snapshot
                        EntryName.endsWith(".chr")||        // vz 200/300 chars
                        EntryName.endsWith(".wav")          // PCM .wav file
                        ){
                        System.out.println("Loading: "+ EntryName);
                    return zipinput;}
                else{
                    System.out.println("Skipping " + zipentry.getName());
                }
            }
            }
                JOptionPane pane = new JOptionPane( box,
                    JOptionPane.QUESTION_MESSAGE,
                    JOptionPane.CLOSED_OPTION);
                if (!Switches.loaded){
                    Switches.loaded=true;
                    choosen=0;
                    pane.createDialog(null, "Choose file:").setVisible(true);
                    System.out.println("You have choosen "+content[choosen]);
                }
                for (int ir = 0; ir < choosen+1; ir++)
                    zipinput.getNextEntry();
                return zipinput;
   }
}

  public void checkZip(String name) throws Exception {
       InputStream  result;

    // Webstart Application uses this:
    if (webstart){

    try {
        result = new FileInputStream(name);
        } catch(Exception e) {
        result = new URL(server + name).openStream();
        }

    }
    // Applet & Standalone emulator uses this code:
    else {
   try {
        result = new URL(applet.getCodeBase(),name).openStream();
        } catch(Exception e) {
        result = new FileInputStream(name);
        }
    }
       if (!Switches.loaded)
       System.out.println("Checking zip....");
       zipcount = 0;
       LinkedList<String> entries = new LinkedList<String>();
                count = rubbish = 0;
          ZipEntry zipentry;
          ZipInputStream zipinputr = new ZipInputStream(result);
            while((zipentry = zipinputr.getNextEntry()) != null){
                String EntryName = zipentry.getName().toLowerCase();
                        entries.add(EntryName);
                        zipcount++;
                }
                box.removeAllItems();
                box.addItemListener(this);
                Iterator<String> i = entries.iterator();
                while (i.hasNext()){
                    String found = i.next();
                    content[count]=found;
                    String EntryName = found.toLowerCase();
                if(     EntryName.endsWith(".dsk")||        // amstrad diskimage
                        EntryName.endsWith(".cdt")||        // amstrad tape
                        EntryName.endsWith(".bin")||        // amstrad binary
                        EntryName.endsWith(".bas")||        // amstrad basic
                        EntryName.endsWith(".cpr")||        // amstrad + cartridge
                        EntryName.endsWith(".sna")||        // amstrad snapshot
                        EntryName.endsWith(".z80")||        // spectrum snapshot
                        EntryName.endsWith(".o")  ||        // zx 81 snapshot
                        EntryName.endsWith(".p")  ||        // zx 80 snapshot
                        EntryName.endsWith(".vsf")||        // vice snapshot (c64)
                        EntryName.endsWith(".tzx")||        // spectrum tape
                        EntryName.endsWith(".rom")||        // rom (general)
                        EntryName.endsWith(".ssd")||        // bbc diskimage
                        EntryName.endsWith(".fnt")||        // bbc font
                        EntryName.endsWith(".vz") ||        // vz 200/300 snapshot
                        EntryName.endsWith(".chr")||        // vz 200/300 chars
                        EntryName.endsWith(".wav")          // PCM .wav file
                        ){
                    box.addItem(found);
                    if (!Switches.loaded)
                    System.out.println("Found: "+ found);
                } else{
                    if (!Switches.loaded)
                    System.out.println("Rubbish: "+ found);
                    rubbish++;
                }
                    count++;
                }
          zipinputr.close();
  }

  public void itemStateChanged( ItemEvent e ) {
      JComboBox selectedChoice = (JComboBox)e.getSource();
      for (int i = 0; i < count; i++)
          if ( selectedChoice.getSelectedItem().equals(content[i]) )
              choosen = i;
  }

So filtere ich ausserdem unbrauchbare Dateien heraus.

Danke nochmals für Eure Hilfe hier!
Wer übrigens noch Code-Optimierungsvorschläge hat, bitte gerne hier posten.

Gruss,
Markus
 

Daniel_L

Bekanntes Mitglied
Das sieht ja schon mal gut aus!

Devilmarkus hat gesagt.:
Wie ich mir das ganze Vorstelle, ein Beispiel hier:
example.png


Dies ist ein Dialog aus einem in C++ programmiertem Emulator.
Es wurde ein ZIP geöffnet, in dem sich mehrere '.dsk' Dateien befinden.
Hier kann der User nun wählen, welches geöffnet werden soll.

Wenn du das auch so oder so ähnlich haben möchtest, würde ich einen neuen JDialog erstellen, mit einer JList. In diese Liste kannst du dann die items aus dem String-Array/Liste packen (anstatt sie in die Combobox zu tun).
 
D

Devilmarkus

Gast
Daniel_L hat gesagt.:
Wenn du das auch so oder so ähnlich haben möchtest, würde ich einen neuen JDialog erstellen, mit einer JList. In diese Liste kannst du dann die items aus dem String-Array/Liste packen (anstatt sie in die Combobox zu tun).

Ja das habe ich gestern auch schon versucht, ist mir aber dann doch zu umständlich.
Diese Lösung reicht völlig.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K bitte um hilfe bei file import Allgemeine Java-Themen 7
W Hilfe bei Methode Allgemeine Java-Themen 14
M Javascript Hilfe bei ToDoList? Allgemeine Java-Themen 1
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
T Hilfe bei negation von suchabfrage Allgemeine Java-Themen 2
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
N Hilfe bei RegEx benötigt Allgemeine Java-Themen 3
A Hilfe beim Verständnis Allgemeine Java-Themen 16
V Hilfe mit Java Code Allgemeine Java-Themen 4
T Hilfe bei Programm. IDE: Eclipse mit EV3-Plugin, lejos Allgemeine Java-Themen 8
alinakeineAhnungv Hilfe bei einem Straßenbahn-Projekt von mir Allgemeine Java-Themen 18
Aboya Kugel mit Hilfe von Dreiecken rekursiv zeichnen Allgemeine Java-Themen 2
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
A Preisberechnung, Hilfe Allgemeine Java-Themen 4
M Bräuchte Hilfe bei der Aufgabe Allgemeine Java-Themen 1
s_1895 Hilfe bei Java Tic Tac Toe Allgemeine Java-Themen 8
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
J Hilfe, Jar Datei kann nicht ausgeführt werden Allgemeine Java-Themen 2
M Hilfe bei einer Java Programmieraufgabe! Ab morgen Montag um 08:00 Uhr Allgemeine Java-Themen 5
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
U Erste Schritte Hilfe bei simplem Glücsspiel in Java Allgemeine Java-Themen 4
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
K Objektorientierung, hilfe Allgemeine Java-Themen 9
V Bilder bei bestimmten Zeiten wechseln, bitte um Hilfe Allgemeine Java-Themen 5
D Hilfe bei Informatik Hausaufgaben Allgemeine Java-Themen 30
RalleYTN Brauche Hilfe beim Run-Length-Decoding Allgemeine Java-Themen 9
S Hilfe bei dem Auslesen einer YAML Datei Allgemeine Java-Themen 8
F NetBeans Hilfe!!! Allgemeine Java-Themen 23
H Schiffe versenken JButton Schiffe mit GUI verbinden Hilfe! Allgemeine Java-Themen 2
M Bitte Hilfe mit REGEX (Negieren) Allgemeine Java-Themen 4
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
S GetMethode erstellen mit Hilfe von Parametern Allgemeine Java-Themen 9
J Java "Bank Programm" Brauche eure Hilfe Allgemeine Java-Themen 3
B Hilfe bei Übungsblätter Allgemeine Java-Themen 9
O Erste Schritte Benzinverbrauch Code Hilfe Allgemeine Java-Themen 3
C Hilfe Bei Vegas Slide Allgemeine Java-Themen 0
B Hilfe!! spiel um Funktion des Selektierens erweitern (mit ASCII-Tabelle) Allgemeine Java-Themen 3
Ice4P4rty Hilfe Bei Promillerechner Allgemeine Java-Themen 9
C Atfx mit Hilfe von OpenAtfx auslesen Allgemeine Java-Themen 1
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
G Hilfe bei Projektarbeit Allgemeine Java-Themen 5
GenerationLost Input/Output Custom Serialization - hilfe bei Realisierung Allgemeine Java-Themen 8
J Hilfe!!! Ausbildung Allgemeine Java-Themen 14
H Hilfe bei Erstellung eines Hilfe Fenster bei Tastendruck (F1 bei Win98) Allgemeine Java-Themen 5
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
T Hilfe bei Code Allgemeine Java-Themen 3
U Swing Hilfe beim Quellcode für ein Codierungs-/Decodierungsprogramm Allgemeine Java-Themen 9
S Hilfe bei Gui Allgemeine Java-Themen 3
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
GRAZZ0R Hilfe zum Spiel Mensch ärger dich nicht Allgemeine Java-Themen 1
C Hilfe bei den Ausgaben Allgemeine Java-Themen 4
K Hilfe bei GUI für Pizza-Service Allgemeine Java-Themen 11
J Hilfe bei Datumsberechnung aus Textfeld Allgemeine Java-Themen 10
I Bitte Drngend hilfe Allgemeine Java-Themen 2
C Hilfe bei NoClassDefFoundError Allgemeine Java-Themen 14
C Hilfe bei einer Fehler meldung Allgemeine Java-Themen 3
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
N Erste Schritte [HILFE] effizienter,leistungsfähigermbackground Pixelbot Allgemeine Java-Themen 5
A Hilfe gesucht Allgemeine Java-Themen 44
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
C Hilfe bei einer Fehlermeldung Allgemeine Java-Themen 5
C Hilfe bei MalformedURLException Allgemeine Java-Themen 7
D Baum zeichnen hilfe Allgemeine Java-Themen 4
M Hilfe bei parseInt Allgemeine Java-Themen 4
F Compiler-Fehler Hilfe bei Startup error Allgemeine Java-Themen 3
D Mit Hilfe von Java aus Excel-Sheet Zellen in neues Excel Dokument kopieren Allgemeine Java-Themen 3
F Socket NullPointerException Bitte um hilfe! Allgemeine Java-Themen 12
M Input/Output Java + OCR ? Erfahrungen und bitte um Hilfe Allgemeine Java-Themen 12
M Brauche Hilfe bei Quellcodeverständnis Allgemeine Java-Themen 4
B Zahlen ausgeben hilfe! Allgemeine Java-Themen 8
S Java USB dringend Hilfe! Allgemeine Java-Themen 6
X Hilfe bei Programm Allgemeine Java-Themen 5
zer0zer0 Best Practice apache common cli - optionen für hilfe ausblenden Allgemeine Java-Themen 5
F Bitte um Hilfe! Allgemeine Java-Themen 5
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
D Brauche Hilfe bei Rechnung (Exponentiation) Allgemeine Java-Themen 12
F Brauche Hilfe bei Java Allgemeine Java-Themen 6
S Hilfe bei simplem Programm Allgemeine Java-Themen 3
J Ein blutiger Anfänger braucht Hilfe Allgemeine Java-Themen 7
B Hilfe bei JUnit Test Allgemeine Java-Themen 1
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
B Dringend Hilfe gesucht für Struktogramm Allgemeine Java-Themen 11
C Brauche Hilfe mit Modulo Strategie Allgemeine Java-Themen 2
S Brauche Hilfe: Prüfungsaufgabe Java Allgemeine Java-Themen 8
J Probleme bei kompilieren ... Bitte um Hilfe Allgemeine Java-Themen 2
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
M google plus java api - Anfänger sucht Hilfe Allgemeine Java-Themen 7
M Hilfe mit JOptionPane Allgemeine Java-Themen 2
I Hilfe: Klasse Vieleck Allgemeine Java-Themen 5
I javax.sound.sampled.* - Hilfe zu den Controls Allgemeine Java-Themen 8
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
S Hilfe bei der Cosinusapproximation Allgemeine Java-Themen 10
K Arraylist Hilfe Allgemeine Java-Themen 13
K Hilfe Felder Allgemeine Java-Themen 7
T Hilfe im Lizenz-Dschungel Allgemeine Java-Themen 11
S brauche Hilfe für ssh connection in java Allgemeine Java-Themen 6
W sql Query abspeichern selber variabele hilfe...? Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben