web-dev-qa-db-ja.com

Groovyでアーカイブを解凍する

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

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

25
HaBaLeS

AFAIK、ネイティブな方法はありません。しかし、あなたが探しているものに非常に近い.Zip(...)メソッドをFileに追加する方法について この記事 を確認してください。 .unzip(...)メソッドを作成する必要があるだけです。

6
John Feminella

たぶん、GroovyはZipファイルの「ネイティブ」サポートを持っていないかもしれませんが、それらを操作することはまだかなり簡単です。

私はZipファイルを使用していますが、使用しているロジックの一部を次に示します。

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
}
48
Chad Gorshing

私の経験では、これを行う最善の方法は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を含めるだけです。

37
Kirk G

Groovy共通拡張プロジェクトは、Groovy 2.0以降にこの機能を提供します。 https://github.com/timyates/groovy-common-extensions

4

この記事では、AntBuilderの例を拡張します。

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

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

1
Merlin

以下の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\\'))
}
1
Ravi Natesh

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

0
bugs_

質問を少し別の方向に向けましたが、構築中のDSLにGroovyを使用することから始めましたが、最終的には、実行したいファイルベースのタスクの多くをより適切に処理するための開始点としてGradleを使用しました(例: 。、ファイルの解凍と解凍、他のプログラムの実行など)。 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
michael