2009-03-14 14 views
22

के साथ अनजिप आर्काइव क्या ज़िप फ़ाइलों को नियंत्रित करने के लिए ग्रोवी में अंतर्निहित समर्थन है (ग्रोवी रास्ता)?ग्रोवी

या क्या मुझे जावा की java.util.zip.ZipFile का उपयोग ग्रोवी में ज़िप फ़ाइलों को संसाधित करने के लिए करना है?

+0

क्या यह अभी भी एक वैध प्रश्न/उत्तर है? क्या ग्रोवी संस्करण यह भी संदर्भित है? – serverhorror

उत्तर

6

AFAIK, कोई मूल तरीका नहीं है। लेकिन this article देखें कि आप फ़ाइल के लिए .zip(...) विधि कैसे जोड़ेंगे, जो आप जो खोज रहे हैं उसके बहुत करीब होंगे। आपको बस .unzip(...) विधि बनाने की आवश्यकता होगी।

+0

दुर्भाग्य से, ब्लॉग से यह आलेख गायब हो गया। सौभाग्य से [एक संग्रहित संस्करण है] (https://web.archive.org/web/20151120062929/http://blog.xebia.com/2008/05/25/powerful-groovy/)। लेकिन [अधिक ग्रोवी पावर] (http://blog.xebia.com/more-groovy-power/) लेख भी अच्छा है। – Jazzschmidt

43

शायद ग्रोवी के पास ज़िप फ़ाइलों के लिए 'मूल' समर्थन नहीं है, लेकिन यह अभी भी उनके साथ काम करने के लिए बहुत छोटा है।

मैं ज़िप फ़ाइलें के साथ काम कर रहा हूँ और निम्नलिखित तर्क मैं उपयोग कर रहा हूँ में से कुछ है:

def zipFile = new java.util.zip.ZipFile(new File('some.zip')) 

zipFile.entries().each { 
    println zipFile.getInputStream(it).text 
} 

आप एक findAll पद्धति का उपयोग करके अतिरिक्त तर्क जोड़ सकते हैं:

def zipFile = new java.util.zip.ZipFile(new File('some.zip')) 

zipFile.entries().findAll { !it.directory }.each { 
    println zipFile.getInputStream(it).text 
} 
+0

+1 मुझे याद दिलाने के लिए कि groovy's .text सभी परंपरागत जावा स्ट्रीम हैंडलिंग बॉयलर प्लेट को प्रतिस्थापित करता है। –

34

में मेरी

def ant = new AntBuilder() // create an antbuilder 

ant.unzip( src:"your-src.zip", 
      dest:"your-dest-directory", 
      overwrite:"false") 

इस तरह से आप: अनुभव, यह करने के लिए सबसे अच्छा तरीका है Antbuilder उपयोग करने के लिए है सभी जटिल चीजों को करने के लिए ज़िम्मेदार नहीं हैं - चींटी आपके लिए इसका ख्याल रखती है। जाहिर है अगर आपको कुछ और दानेदार की आवश्यकता है तो यह काम नहीं करेगा, लेकिन ज्यादातर 'इस फ़ाइल को अनजिप करें' परिदृश्यों के लिए यह वास्तव में प्रभावी है।

एंटीबिल्डर का उपयोग करने के लिए, बस अपने क्लासपाथ में ant.jar और ant-launcher.jar शामिल करें।

+0

@ {किर्क जी}। क्या आप जानते हैं कि इस दृष्टिकोण का पालन करते हुए, एंटीबाइडर को शांत करना संभव है (स्क्रीन पर आउटपुट नहीं करना)? –

+0

आप यहां पैटर्न का उपयोग कैसे करते हैं? चुनिंदा फाइलों को कैसे अनजिप करें? –

+0

ध्यान दें कि ant.unzip मौजूदा चींटी unzip कार्य के आसपास एक साधारण wrapper है। आपके द्वारा दिए गए पैरामीटर सीधे पास किए जाते हैं। अधिक जानकारी के लिए https://ant.apache.org/manual/Tasks/unzip.html देखें। –

1

यह आलेख एंटीबिल्डर उदाहरण पर फैला हुआ है।

http://preferisco.blogspot.com/2010/06/using-goovy-antbuilder-to-zip-unzip.html

हालांकि, प्रिंसिपल की बात के रूप - वहाँ गुण, बंद किया जाना, नक्शे आदि है कि जब ग्रूवी/जावा में एक नया पहलू पर शोध किया जा सकता है के सभी पता लगाने के लिए एक तरीका है? वास्तव में उपयोगी चीजों का भार प्रतीत होता है, लेकिन उनके छिपे खजाने को अनलॉक करने के लिए कैसे? NetBeans/ग्रहण कोड-पूर्ण विशेषताएं अब हमारे पास मौजूद नई भाषा समृद्धि में निराशाजनक रूप से सीमित लगती हैं।

-2
def zip(String s){ 
    def targetStream = new ByteArrayOutputStream() 
    def zipStream = new GZIPOutputStream(targetStream) 
    zipStream.write(s.getBytes()) 
    zipStream.close() 
    def zipped = targetStream.toByteArray() 
    targetStream.close() 
    return zipped.encodeBase64() 
} 
0

एंटीबिल्डर का उपयोग करके अनजिप अच्छा तरीका है।
दूसरा विकल्प एक तीसरे पक्ष के पुस्तकालय का उपयोग है - मेरा सुझाव है Zip4j

3

ग्रूवी आम विस्तार परियोजना ग्रूवी 2.0 के लिए और इसके बाद के संस्करण इस कार्यक्षमता प्रदान करता है: https://github.com/timyates/groovy-common-extensions

0

हालांकि सवाल दूसरी दिशा में एक सा ले, मैं शुरू कर दिया एक डीएसएल के लिए ग्रोवी का उपयोग करके जो मैं निर्माण कर रहा था, लेकिन ग्रैडल का उपयोग शुरुआती बिंदु के रूप में करने के लिए एक बहुत ही फाइल-आधारित कार्यों को बेहतर तरीके से संभालने के लिए समाप्त कर दिया जो मैं करना चाहता था (उदाहरण के लिए, फ़ाइलों को अनजिप और अनार करना, अन्य प्रोग्राम निष्पादित करना आदि) । Gradle बनाता है कि क्या groovy कर सकते हैं, और प्लगइन्स के माध्यम से आगे बढ़ाया जा सकता है।

// build.gradle 
task doUnTar << { 
    copy { 
     // tarTree uses file ext to guess compression, or may be specific 
     from tarTree(resources.gzip('foo.tar.gz')) 
     into getBuildDir() 
    } 
} 

task doUnZip << { 
    copy { 
     from zipTree('bar.zip') 
     into getBuildDir() 
    } 
} 

तो, उदाहरण के लिए (इस bar.zip और foo.tgz अर्क निर्देशिका build में):

$ gradle doUnZip 
$ gradle doUnTar 
0

नीचे ग्रूवी तरीकों विशिष्ट फ़ोल्डर (: \ फ़ोल्डर सी) में अनज़िप होगा। उम्मीद है की यह मदद करेगा।

import org.apache.commons.io.FileUtils 
import java.nio.file.Files 
import java.nio.file.Paths 
import java.util.zip.ZipFile 

def unzipFile(File file) { 
    cleanupFolder() 
    def zipFile = new ZipFile(file) 
    zipFile.entries().each { it -> 
     def path = Paths.get('c:\\folder\\' + it.name) 
     if(it.directory){ 
      Files.createDirectories(path) 
     } 
     else { 
      def parentDir = path.getParent() 
      if (!Files.exists(parentDir)) { 
       Files.createDirectories(parentDir) 
      } 
      Files.copy(zipFile.getInputStream(it), path) 
     } 
    } 
} 

private cleanupFolder() { 
    FileUtils.deleteDirectory(new File('c:\\folder\\')) 
}