2016-07-24 30 views
2

Ich habe eine Path Zip-Datei auf virtuellen Dateisystem (JIMFS) und ich muss diese Zip-Datei mit ZipFile öffnen.Java: ZipFile mit Pfad

Aber es gibt keinen Konstruktor in ZipFile, um Path als Argument zu erhalten, nur File.

Allerdings kann ich nicht von meinem Path ein File (path.toFile()) erstellen, weil ich UnsupportedOperationException bekomme. Wie kann ich meine Zip-Datei mit ZipFile öffnen? Oder gibt es andere Möglichkeiten, mit Zip-Dateien zu arbeiten, die nicht im Standard-Dateisystem sind?

+0

Verwenden 'ZipFile (String)' stattdessen? –

+0

@Yassin Hajaj Ich bekomme 'FileNotFoundException' weil es die Datei im Standard-Dateisystem findet, aber nicht im virtuellen Dateisystem. –

Antwort

1

Die Klasse ZipFile ist auf Dateien im Dateisystem beschränkt.

Eine Alternative wäre stattdessen ZipInputStream zu verwenden. Erstellen Sie ein InputStream von Ihrem Path

Path path = ... 
InputStream in = Files.newInputStream(path, openOptions) 

mit und die Verwendung der InputStream, um eine ZipInputStream zu erstellen. Dieser Weg sollte wie erwartet funktionieren:

ZipInputStream zin = new ZipInputStream(in) 
2

einen Blick auf this question Take - gibt es einen Code, der von Inhalt der Zip-Datei ein neues Dateisystem erstellt:

  • nehmen einen Weg Zip
  • convert Pfad zu URI
  • erstellen ein neues Dateisystem für URI
+0

Ich weiß das - Zip-Dateisystem erstellen. Ich brauche es jedoch nicht. Ich habe mein virtuelles System und zip-Datei darauf. Und ich muss nur die Datei aus dieser Zip-Datei kopieren. –

+0

Sieht trickreich aus. Was wäre, wenn Sie FileSystemProvider verwenden könnten, um Datei von einem Pfad zu einem anderen zu kopieren https://docs.oracle.com/javase/7/docs/api/java/nio/file/spi/FileSystemProvider.html#copy(java.nio). Datei.Pfad,% 20java.nio.file.Path,% 20java.nio.file.CopyOption ...) –