سؤال

وهناك دعم المضمنة في رائع للتعامل مع الملفات المضغوطة (الطريقة رائع)؟

وأو هل لديك لاستخدام java.util.zip.ZipFile جاوة لمعالجة الملفات المضغوطة في رائع؟

هل كانت مفيدة؟

المحلول

وAFAIK، وليس هناك وسيلة الأم. ولكن تحقق من هذه المقالة على الطريقة التي تريد إضافة أسلوب .zip(...) إلى ملف، التي من شأنها أن تكون قريبة جدا إلى ما كنت أبحث عنه. كنت بحاجة فقط لجعل طريقة .unzip(...).

نصائح أخرى

وربما رائع لا يدعم "الأصلي" للملفات والرمز البريدي، لكنه لا يزال تافهة جدا للعمل معهم.

وأنا أعمل مع الملفات المضغوطة وفيما يلي بعض من منطق أنا باستخدام:

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
}

في تجربتي، فإن أفضل طريقة للقيام بذلك هو استخدام Antbuilder:

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

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

وهذه الطريقة لم تكن مسؤولة عن القيام بجميع الأشياء معقدة - يأخذ النمل العناية بها بالنسبة لك. من الواضح إذا كنت بحاجة إلى شيء أكثر تفصيلا فإن هذا لن يعمل، ولكن بالنسبة لمعظم 'فقط بفك هذا الملف' سيناريوهات هذا هو فعالة حقا.

لاستخدام antbuilder، وتشمل فقط ant.jar والنمل launcher.jar في CLASSPATH الخاص بك.

وهذا المشروع امتداد المشترك رائع يوفر هذه الوظيفة رائع 2.0 فما فوق: HTTPS: // جيثب. كوم / timyates / رائع-المشتركة-ملحقات

وتوسع هذه المادة على سبيل المثال AntBuilder.

HTTP: //preferisco.blogspot كوم / 2010/06 / باستخدام-goovy-antbuilder إلى البريدي unzip.html

ولكن، على سبيل أصل الدين - هل هناك طريقة لمعرفة كافة الخصائص والإغلاق والخرائط وغيرها التي يمكن استخدامها عند البحث وجها جديدا في رائع / جافا؟ يبدو أن هناك الكثير من الاشياء المفيدة حقا، ولكن كيف لفتح الكنوز الخفية؟ ملامح رمز الكامل ل NetBeans / الكسوف الآن تبدو محدودة ميؤوس منها في ثراء اللغة الجديدة التي لدينا هنا.

وبفك باستخدام AntBuilder هو وسيلة جيدة.
الخيار الثاني هو استخدام مكتبة طرف ثالث - أوصي Zip4j

وعلى الرغم من أخذ مسألة قليلا في اتجاه آخر، لقد بدأت باستخدام رائع لDSL بأنني بناء، ولكن انتهى الأمر باستخدام Gradle كنقطة انطلاق لتحسين التعامل مع الكثير من المهام المستندة إلى الملفات التي أردت أن لا (على سبيل المثال، بفك الملفات وuntar، وتنفيذ البرامج الأخرى، الخ). يبني Gradle على ما رائع يمكن القيام به، ويمكن أن تزيد من أن تمتد عبر المحمول.

// 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

والأساليب رائع أدناه سوف بفك إلى مجلد معين (C: \ مجلد). ويساعد هذا الأمل.

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\\'))
}
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()
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top