2011-03-01 13 views
9

मैं अपने स्कैला कार्यक्रम में सीधे ज़िप फ़ाइल से एक्सएमएल डेटा फ़ाइलों का उपयोग कैसे करूं? क्या मेरे स्कैला कोड में प्रोग्रामेटिक रूप से अनजिप और सामग्री पढ़ने के लिए कोई सीधा तरीका है? http://download.oracle.com/javase/6/docs/api/java/util/zip/package-summary.htmlस्कैला कोड में ज़िपित xml फ़ाइलों से कैसे पढ़ा जाए?

उत्तर

16

यहाँ 2.8.1 में यह करने के तरीके के एक जोड़े हैं:

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

और फिर आरईपीएल में:

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

बहुत बहुत धन्यवाद। यह वास्तव में सबसे ज्यादा मदद की। मैंने जावा गणना को स्कैला सूची में परिवर्तित करने के लिए एक अंतर्निहित विधि कोड चिपकाया। collection.JavaConverters._ और asScala() ने कोड जटिलता को कम करने में मदद की। स्केल में एक्सएमएल और ज़िप फाइल पढ़ने दोनों के लिए बहुत सारे उपयोगी उदाहरण हैं। अनेक अनेक धन्यवाद। –

5

आप जावा पैकेज java.util.zip उपयोग कर सकते हैं। यह आपको वर्चुअल फाइल सिस्टम के रूप में संग्रह फ़ाइलों का इलाज करने की अनुमति देता है, जो मानक जावा फ़ाइल I/O के समान इंटरफ़ेस प्रदान करता है।

+0

कौन सा _does_ ओपी के टैग अनुरोधों के रूप में gzip (हालांकि tar.gz नहीं) समर्थन है। –

+1

मुझे यहां 'tar' नहीं है, बस 'gzip'। :) एक GZIPInputStream डॉक्टर द्वारा आदेश दिया गया होना चाहिए। या, यदि यह वास्तव में एक पीकेजेआईपी फ़ाइल है, तो उसी पैकेज में कुछ और काम करेगा (आकस्मिक जटिलता की अतिरिक्त सहायता के साथ) –

+0

हम्मम्म ... कोई त्वरित नमूना कोड देखने के लिए? मैं जूट थोड़ा आलसी हूं, यह है। –

4

मैं व्यक्तिगत रूप से TrueZip पसंद करते हैं:

संबंधित मुद्दे