Dies ist ein einfacheres Beispiel:
%Vor%Dies ist dem obigen Code ähnlich, aber es gibt keinen Grund, hier mit open-open zu arbeiten. Dieses Beispiel gibt eine Sequenz von Daten zurück, die Sie dann ausdrucken oder noch besser formatieren können. Es ist besser, wenn die Funktion, die die Daten extrahiert, nur Daten zurückgibt, statt dass der Nebeneffekt des Druckens in dieser Funktion enthalten ist.
Wenn Sie den Inhalt ausdrucken möchten, können Sie
verwenden %Vor%und es wird dir eine schöne Liste geben.
Dies ist vergleichbar mit skuros Antwort, die ZipInputStream
verwendet, aber eine etwas engere Definition von entries
.
Wenn Sie die Dateien tatsächlich extrahieren möchten, benötigen Sie eine andere Hilfsfunktion zum Kopieren. Ich habe clojure.java.io
verwendet, um den Code zu verkürzen, aber das gleiche könnte ohne diese Abhängigkeit erreicht werden.
Dies entspricht effektiv dem einfachen Entpacken der Datei mit dem Dienstprogramm unzip
. Das Schöne daran ist, dass Sie, da sich die Einträge in einem faulen Seq befinden, filter
oder drop
oder take
für Ihren Herz- (oder Anforderungs-) Inhalt verwenden können. Nun, ich bin mir ziemlich sicher, dass du das kannst. Habe es noch nicht wirklich probiert:)
Beachten Sie auch. Sie MÜSSEN den Seq innerhalb der Funktion, wo Sie den Zip-Stream öffnen, verarbeiten !!!
Clojure-Contr hat Bibliotheken IO und Jar , die den Code kürzer machen:
%Vor%Vorbehalt: Funktion filenames-in-jar führt keine Verzeichniseinträge in der Zip-Datei auf, sondern nur die Namen der tatsächlichen Dateien.