2011-03-01 9 views

Répondre

16

Voici deux façons de le faire dans 2.8.1:

cat > root.xml << EOF 
<ROOT> 
<id>123</id> 
</ROOT> 
EOF 
zip root root.xml 

puis dans le REPL:

val rootzip = new java.util.zip.ZipFile("root.zip") 
import collection.JavaConverters._ 
val entries = rootzip.entries.asScala 
entries foreach { e => 
    val x = scala.xml.XML.load(rootzip.getInputStream(e)) 
    println(x) 
} 

ou quelque chose comme:

val rootzip = new java.util.zip.ZipFile("root.zip") 
import scala.collection.JavaConversions._ 
rootzip.entries. 
    filter (_.getName.endsWith(".xml")). 
    foreach { e => println(scala.xml.XML.load(rootzip.getInputStream(e))) } 
+0

Merci beaucoup. Celui-ci a vraiment aidé le plus. J'ai collé un code de méthode implicite pour convertir la liste Java Enumeration en Scala. collection.JavaConverters._ et asScala() ont aidé à réduire la complexité du code. Beaucoup d'exemples vraiment utiles pour la lecture de fichiers XML et ZIP dans Scala. Merci beaucoup. –

5

Vous pouvez utiliser le package Java java.util.zip: http://download.oracle.com/javase/6/docs/api/java/util/zip/package-summary.html

+0

qui _does_ avoir un support gzip (mais pas tar.gz), comme le demande l'étiquette de l'OP. –

+1

Je ne vois pas de 'tar' ici, juste 'gzip'. :) Un GZIPInputStream devrait être juste ce que le docteur a commandé. Ou, si c'est en fait un fichier PKZIP, quelque chose d'autre dans le même paquet fonctionnera (avec une aide supplémentaire de complexité accidentelle) –

+0

hmmmm ... un exemple de code rapide à regarder? Je suis un peu paresseux, c'est tout. –

4

Je préfère personnellement TrueZip. Il vous permet de traiter les fichiers d'archive comme un système de fichiers virtuel, fournissant la même interface que les E/S de fichiers Java standard.

Questions connexes