c'è un supporto integrato in Groovy per gestire i file Zip (il modo groovy)?Unzip Archive with Groovy
Oppure devo usare java.util.zip.ZipFile di Java per elaborare i file Zip in Groovy?
c'è un supporto integrato in Groovy per gestire i file Zip (il modo groovy)?Unzip Archive with Groovy
Oppure devo usare java.util.zip.ZipFile di Java per elaborare i file Zip in Groovy?
AFAIK, non esiste un modo nativo. Ma controlla this article su come aggiungere un metodo .zip(...)
a File, che sarebbe molto vicino a quello che stai cercando. Dovresti solo creare un metodo .unzip(...)
.
Purtroppo, quell'articolo è scomparso dal blog. Fortunatamente [c'è una versione archiviata] (https://web.archive.org/web/20151120062929/http://blog.xebia.com/2008/05/25/powerful-groovy/). Ma anche l'articolo [More Groovy Power] (http://blog.xebia.com/more-groovy-power/) è buono. – Jazzschmidt
Forse Groovy non ha il supporto "nativo" per i file zip, ma è ancora piuttosto semplice lavorare con loro.
Sto lavorando con i file zip e la successiva è un po 'la logica che sto utilizzando:
def zipFile = new java.util.zip.ZipFile(new File('some.zip'))
zipFile.entries().each {
println zipFile.getInputStream(it).text
}
È possibile aggiungere ulteriore logica utilizzando un metodo findAll
:
def zipFile = new java.util.zip.ZipFile(new File('some.zip'))
zipFile.entries().findAll { !it.directory }.each {
println zipFile.getInputStream(it).text
}
+1 per avermi ricordato che il testo di groovy sostituisce tutto il tradizionale piatto di gestione del flusso java. –
Nella mia esperienza, il modo migliore per farlo è utilizzare Antbuilder:
def ant = new AntBuilder() // create an antbuilder
ant.unzip( src:"your-src.zip",
dest:"your-dest-directory",
overwrite:"false")
In questo modo non sono responsabile per fare tutte le cose complicate - la formica si prende cura di te per te. Ovviamente, se hai bisogno di qualcosa di più granulare, questo non funzionerà, ma per la maggior parte degli scenari di "decomprimere questo file" questo è davvero efficace.
Per utilizzare antbuilder, è sufficiente includere ant.jar e ant-launcher.jar nel classpath.
@ {Kirk G}. Sai se seguendo questo approccio, è possibile rendere AntBuider silenzioso (non in uscita sullo schermo)? –
come usi i modelli qui? come decomprimere i file selettivi? –
Si noti che ant.unzip è un semplice wrapper attorno al task ant decompressione esistente. I parametri che fornisci vengono semplicemente passati direttamente. Vedi https://ant.apache.org/manual/Tasks/unzip.html per maggiori informazioni. –
Questo articolo si espande nell'esempio di AntBuilder.
http://preferisco.blogspot.com/2010/06/using-goovy-antbuilder-to-zip-unzip.html
Tuttavia, per una questione di capitale - c'è un modo per scoprire tutte le proprietà, chiusure, mappe, ecc che possono essere utilizzati quando la ricerca di un nuovo aspetto in Groovy/java? Sembra che ci siano un sacco di cose davvero utili, ma come sbloccare i loro tesori nascosti? Le funzionalità complete del codice NetBeans/Eclipse ora sembrano irrimediabilmente limitate nella nuova ricchezza linguistica che abbiamo qui.
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()
}
Decomprimere utilizzando AntBuilder è un buon modo.
Seconda opzione è utilizzare una libreria di terze parti - vi consiglio Zip4j
Il progetto di ampliamento comune Groovy fornisce questa funzionalità per Groovy 2.0 e superiori: https://github.com/timyates/groovy-common-extensions
Anche se prendendo la questione un po 'in un altro senso, sono partito usando Groovy per una DSL che stavo creando, ma ho finito per usare Gradle come punto di partenza per gestire meglio molte delle attività basate sui file che volevo fare (ad esempio, decomprimere e decomprimere i file, eseguire altri programmi, ecc.) . Gradle si basa su ciò che Groovy può fare e può essere esteso ulteriormente tramite plugin.
// 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()
}
}
Poi, per esempio (questo estrae il bar.zip
e foo.tgz
nella directory build
):
$ gradle doUnZip
$ gradle doUnTar
Il sotto i metodi groove verrà decomprimere nella cartella specifica (cartella C: \). Spero che questo ti aiuti.
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\\'))
}
È ancora una domanda/risposta valida? Che versione di Groovy fa riferimento anche a questo? – serverhorror