czy w Groovy jest wbudowana obsługa plików Zip (sposób groovy)?Rozpakuj archiwum za pomocą Groovy
Czy muszę używać Java java.util.zip.ZipFile do przetwarzania plików Zip w Groovy?
czy w Groovy jest wbudowana obsługa plików Zip (sposób groovy)?Rozpakuj archiwum za pomocą Groovy
Czy muszę używać Java java.util.zip.ZipFile do przetwarzania plików Zip w Groovy?
AFAIK, nie ma rodzimego sposobu. Sprawdź jednak, this article, jak dodać do pliku opcję .zip(...)
, która byłaby bardzo zbliżona do tego, czego szukasz. Trzeba po prostu wykonać metodę .unzip(...)
.
Niestety, ten artykuł zniknął z bloga. Na szczęście [istnieje wersja zarchiwizowana] (https://web.archive.org/web/20151120062929/http://blog.xebia.com/2008/05/25/powerful-groovy/). Ale artykuł [More Groovy Power] (http://blog.xebia.com/more-groovy-power/) jest również dobry. – Jazzschmidt
Może Groovy nie ma "natywnego" wsparcia dla plików zip, ale praca z nimi jest nadal dość banalna.
pracuję z plików ZIP i po to niektóre z logiką używam:
def zipFile = new java.util.zip.ZipFile(new File('some.zip'))
zipFile.entries().each {
println zipFile.getInputStream(it).text
}
Możesz dodać dodatkową logikę użyciu findAll
metody:
def zipFile = new java.util.zip.ZipFile(new File('some.zip'))
zipFile.entries().findAll { !it.directory }.each {
println zipFile.getInputStream(it).text
}
+1 za przypomnienie mi, że groovy's .text zastępuje wszystkie tradycyjne ścieżki java obsługujące płytę kotła. –
W moim doświadczenie, najlepszym sposobem na to jest użycie Antbuildera:
def ant = new AntBuilder() // create an antbuilder
ant.unzip( src:"your-src.zip",
dest:"your-dest-directory",
overwrite:"false")
W ten sposób nie ponoszę odpowiedzialności za wykonanie wszystkich skomplikowanych rzeczy - mrówka troszczy się o ciebie. Oczywiście, jeśli potrzebujesz czegoś bardziej szczegółowego, to nie zadziała, ale dla większości scenariuszy "po prostu rozpakuj ten plik" jest to naprawdę skuteczne.
Aby użyć programu antywirusowego, po prostu dodaj ant.jar i ant-launcher.jar do swojej ścieżki klas.
@ {Kirk G}. Czy wiesz, że jeśli zastosujesz to podejście, możliwe będzie wyciszenie AntBuidera (nie wysyłanie go na ekran)? –
jak używasz tutaj wzorów? jak rozpakować pliki selektywne? –
Należy pamiętać, że ant.unzip jest prostym opakowaniem wokół istniejącego zadania rozpakowywania mrówek. Podane parametry są po prostu przekazywane bezpośrednio. Więcej informacji można znaleźć na stronie https://ant.apache.org/manual/Tasks/unzip.html. –
Ten artykuł rozwija się na przykładzie AntBuilder.
http://preferisco.blogspot.com/2010/06/using-goovy-antbuilder-to-zip-unzip.html
Jednak w gruncie kapitału - czy jest jakiś sposób, aby dowiedzieć się wszystkie właściwości, zamknięcia, map itp, które można wykorzystać podczas poszukiwania nowego aspekt w Groovy/java? Wydaje się, że jest mnóstwo naprawdę przydatnych rzeczy, ale jak odblokować ukryte skarby? Funkcje pełne kodu NetBeans/Eclipse wydają się teraz beznadziejnie ograniczone w nowym bogactwie językowym, które mamy tutaj.
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()
}
Rozpakuj za pomocą AntBuilder to dobry sposób.
Drugą opcją jest użycie trzeci biblioteki strona - Polecam Zip4j
Groovy projekt wspólny Rozszerzenie udostępnia tę funkcję dla Groovy 2.0 i powyżej: https://github.com/timyates/groovy-common-extensions
Chociaż biorąc Pytanie trochę w innym kierunku, Zacząłem używając Groovy do DSL, który budowałem, ale skończyłem używając Gradle jako punktu wyjścia do lepszego radzenia sobie z wieloma zadaniami opartymi na plikach, które chciałem zrobić (np., rozpakować i rozpakować pliki, wykonać inne programy, itp.) . Gradle opiera się na tym, co groovy może zrobić, i może być rozszerzony poprzez wtyczki.
// 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()
}
}
Następnie, dla przykładu (to wyodrębnia bar.zip
i foo.tgz
w katalogu build
):
$ gradle doUnZip
$ gradle doUnTar
poniższych metod porywające będzie rozpakowania do określonego folderu (c: \ folder). Mam nadzieję że to pomoże.
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\\'))
}
Czy to nadal jest prawidłowe pytanie/odpowiedź? Jaką wersję ma Groovy? – serverhorror