2011-03-01 68 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相同的界面。