2011-03-01 35 views

回答

16

這裏有一對夫婦的做這件事的方式2.8.1:

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

然後在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) 
} 

或類似的東西:

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

非常感謝。這一個真的幫助最大。我粘貼了一個隱式方法代碼,用於將Java Enumeration轉換爲Scala列表。 collection.JavaConverters._和asScala()幫助減少了代碼的複雜性。在scala中讀取XML和ZIP文件的許多真正有用的示例。萬分感謝。 – 2011-03-10 11:40:42

5
+0

哪個_does_根據OP的標籤要求,提供gzip(儘管不是tar.gz)支持。 – 2011-03-01 13:22:44

+1

我在這裏看不到'tar',只是'gzip'。 :)一個GZIPInputStream應該只是醫生的命令。或者,如果它實際上是一個PKZIP文件,那麼同一個包中的其他內容將會起作用(帶來額外的意外複雜性) – 2011-03-01 18:18:24

+0

hmmmm ...要查看的任何快速示例代碼?我只是有點懶,那就是它。 – 2011-03-01 18:26:39

4

我個人比較喜歡TrueZip。它允許您將存檔文件視爲虛擬文件系統,提供與標準Java文件I/O相同的界面。