Zum Inhalt springen

file_id.diz Datei umgehen wenn ZIP geöffnet wird


Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo,

wie kann ich die in einigen ZIP-Archiven enthaltene 'file_id.diz' Datei umgehen beim einlesen einer ZIP-Datei?

Hier mein Code zum Einlesen:

  public InputStream openFile(String name) throws Exception {

    System.out.println("File: " + name);

    InputStream result;

    try {

        result = new URL(applet.getCodeBase(),name).openStream();

        } catch(Exception e) {

        result = new FileInputStream(name);

    }

    if (name.toLowerCase().endsWith(".zip")) {

      ZipInputStream str = new ZipInputStream(result);

      str.getNextEntry();

      result = str;

    }

    return result;

}

Wer kann mir nun sagen, wie ich erkennen kann, ob eine 'file_id.diz' Datei in dem ZIP ist, und wie ich diese umgehen kann?

Beispiel:

in dem ZIP 'test.zip' sind enthalten:

- file_id.diz

- test.dsk

Nun möchte ich, dass nur das 'test.dsk' gelesen wird.

MfG

Markus

Bearbeitet von Devilmarkus
Geschrieben

Hallo,

eine Möglichkeit wäre die folgende:

public static ArrayList<ZipEntry> readZip(String path) throws IOException {			

		ZipInputStream zis = new ZipInputStream(new FileInputStream(path));

		ZipEntry entry;

		ArrayList<ZipEntry> entries = new ArrayList<ZipEntry>();

		while((entry = zis.getNextEntry()) != null) {

			if(!entry.getName().endsWith("file_id.diz"))

				entries.add(entry);

		}


		return entries;

	}

}

ZipInputStream (Java 2 Platform SE v1.4.2)

ZipEntry (Java 2 Platform SE v1.4.2)

Geschrieben
Hallo,

eine Möglichkeit wäre die folgende:

public static ArrayList<ZipEntry> readZip(String path) throws IOException {			

		ZipInputStream zis = new ZipInputStream(new FileInputStream(path));

		ZipEntry entry;

		ArrayList<ZipEntry> entries = new ArrayList<ZipEntry>();

		while((entry = zis.getNextEntry()) != null) {

			if(!entry.getName().endsWith("file_id.diz"))

				entries.add(entry);

		}


		return entries;

	}

}

ZipInputStream (Java 2 Platform SE v1.4.2)

ZipEntry (Java 2 Platform SE v1.4.2)

Klingt logisch...

Nur: Wie implementiere ich das nun in meinen Code?

ich benötige als 'result' einen java.io.InputStream.

Geschrieben (bearbeitet)

Habe es herausgefunden:

   if (name.toLowerCase().endsWith(".zip")) {

          ZipEntry entry;

          ZipInputStream str = new ZipInputStream(result);

            while((entry = str.getNextEntry()) != null) {

                System.out.println("Reading " + entry.getName());

                if(!entry.getName().toLowerCase().endsWith(".diz"))

                    return str;

            }

   }

Danke für die Hilfe.

Bearbeitet von Devilmarkus
Geschrieben

Hallo,

zum Beispiel indem du ZipFile anstatt ZipInputStream verwendest. Du bekommst so allerdings nur die erste Datei geliefert, insofern diese nicht file_id.diz heißt, ansonsten null.

public InputStream readZip(String path) throws IOException {			

		ZipFile zip = new ZipFile(path);

		ZipEntry entry;

		while(zip.entries().hasMoreElements()) {

			if(!(entry = zip.entries().nextElement()).getName().endsWith("file_id.diz"))

				return zip.getInputStream(entry);

		}


		return null;

	}

Geschrieben

Kein Problem, vergiss nicht die Streams wieder zu schließen, ansonsten könnte es zu Problemen kommen. Am besten immer in einem finally-Block.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...