groovyにはZipファイルを処理するための組み込みのサポートがありますか(Groovyの方法)?
または、GroovyでZipファイルを処理するためにJavaのJava.util.Zip.ZipFileを使用する必要がありますか?
AFAIK、ネイティブな方法はありません。しかし、あなたが探しているものに非常に近い.Zip(...)
メソッドをFileに追加する方法について この記事 を確認してください。 .unzip(...)
メソッドを作成する必要があるだけです。
たぶん、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
}
私の経験では、これを行う最善の方法は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を含めるだけです。
Groovy共通拡張プロジェクトは、Groovy 2.0以降にこの機能を提供します。 https://github.com/timyates/groovy-common-extensions
この記事では、AntBuilderの例を拡張します。
http://preferisco.blogspot.com/2010/06/using-goovy-antbuilder-to-Zip-unzip.html
ただし、原則として-groovy/javaで新しいファセットを研究するときに使用できるすべてのプロパティ、クロージャー、マップなどを見つける方法はありますか?本当に便利なものがたくさんあるようですが、隠された宝物のロックを解除するにはどうすればよいですか? NetBeans/Eclipseのコード完全な機能は、ここにある新しい言語の豊富さに絶望的に制限されているようです。
以下の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\\'))
}
AntBuilderを使用して解凍するのが良い方法です。
2番目のオプションはサードパーティのライブラリを使用することです-私はお勧めします Zip4j
質問を少し別の方向に向けましたが、構築中の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