Lesen einer Zip-Datei mit Java API von Clojure

8

Ich versuche, das folgende Snippet in clojure umzuschreiben, aber es kommt alles hässlich raus, vielleicht wird jemand eine elegantere Lösung vorschlagen?

%Vor%

Hier ist mein hässlicher Versuch mit doppeltem Aufruf von getNextEntry:

%Vor%     
Dfr 24.03.2011, 12:31
quelle

4 Antworten

17

Ich würde mit etwas wie dem folgenden gehen:

%Vor%

EDIT: Der obige Code wurde schließlich getestet und korrigiert.

BEARBEITEN: das Folgende funktioniert wie erwartet und es ist viel prägnanter, obwohl es eine andere Java-API verwendet

%Vor%     
skuro 24.03.2011, 13:16
quelle
6

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.

    
abedra 25.03.2011 03:34
quelle
1

Dies ist vergleichbar mit skuros Antwort, die ZipInputStream verwendet, aber eine etwas engere Definition von entries .

%Vor%

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.

%Vor%

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 !!!

    
Geoff 04.11.2014 19:22
quelle
0

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.

    
Leonel 24.03.2011 13:19
quelle

Tags und Links