31

Groovy には、Zip ファイルを処理する組み込みのサポートがありますか (Groovy の方法)?

または、Java の java.util.zip.ZipFile を使用して Groovy で Zip ファイルを処理する必要がありますか?

4

9 に答える 9

40

私の経験では、これを行う最善の方法は、Antbuilder を使用することです。

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

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

この方法では、すべての複雑なことを行う責任はありません。ant が面倒を見てくれます。明らかに、もっと細かいものが必要な場合、これは機能しませんが、ほとんどの「このファイルを解凍するだけ」のシナリオでは、これは非常に効果的です。

antbuilder を使用するには、クラスパスに ant.jar と ant-launcher.jar を含めるだけです。

于 2010-02-10T16:31:15.420 に答える
6

私の知る限り、ネイティブな方法はありません。しかし、File にメソッドを追加する方法については、この記事.zip(...)を参照してください。これは、探しているものに非常に近いものです。.unzip(...)メソッドを作成するだけで済みます。

于 2009-03-14T12:32:35.070 に答える
4

以下の groovy メソッドは、特定のフォルダー (C:\folder) に解凍します。お役に立てれば。

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\\'))
}
于 2016-11-16T05:41:49.607 に答える
1

この記事では、AntBuilder の例を詳しく説明します。

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

ただし、原則として、groovy/Java で新しいファセットを調査するときに使用できるすべてのプロパティ、クロージャー、マップなどを見つける方法はありますか? 本当に便利なものがたくさんあるようですが、隠された宝物のロックを解除するにはどうすればよいでしょうか? NetBeans/Eclipse のコード完全機能は、ここにある新しい言語の豊富さの中で絶望的に制限されているように見えます。

于 2010-06-23T10:08:27.640 に答える
0

AntBuilderを使用して解凍するのが良い方法です。
2番目のオプションはサードパーティのライブラリを使用することです-私はZip4jをお勧めします

于 2012-06-18T10:46:41.443 に答える
-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()
}
于 2011-08-25T02:19:36.207 に答える