есть встроенная поддержка в Groovy для обработки Zip-файлов (groovy way)?Unzip Archive с Groovy
Или мне нужно использовать java.util.zip.Zip.ZipFile для обработки Zip-файлов в Groovy?
есть встроенная поддержка в Groovy для обработки Zip-файлов (groovy way)?Unzip Archive с Groovy
Или мне нужно использовать java.util.zip.Zip.ZipFile для обработки Zip-файлов в Groovy?
AFAIK, нет родного пути. Но зайдите this article о том, как вы добавите метод .zip(...)
в файл, который будет очень близок к тому, что вы ищете. Вам просто нужно сделать метод .unzip(...)
.
К сожалению, эта статья исчезла из блога. К счастью [имеется архивная версия] (https://web.archive.org/web/20151120062929/http://blog.xebia.com/2008/05/25/powerful-groovy/). Но статья [More Groovy Power] (http://blog.xebia.com/more-groovy-power/) также хороша. – Jazzschmidt
Возможно, Groovy не имеет «родной» поддержки для 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
}
+1, чтобы напомнить мне, что Groovy's .text заменяет все традиционные java-потоки, обрабатывающие плиту котла. –
В моей опыт, лучший способ сделать это - использовать Antbuilder:
def ant = new AntBuilder() // create an antbuilder
ant.unzip( src:"your-src.zip",
dest:"your-dest-directory",
overwrite:"false")
Таким образом, вы не несут ответственности за выполнение всех сложных вещей - муравь позаботится об этом для вас. Очевидно, что если вам нужно что-то более зернистое, тогда это не сработает, но для большинства сценариев «просто разархивировать этот файл» это действительно эффективно.
Чтобы использовать antbuilder, просто добавьте ant.jar и ant-launcher.jar в свой путь к классу.
@ {Kirk G}. Знаете ли вы, что если следовать этому подходу, можно сделать AntBuider тихим (не выводимым на экран)? –
как вы используете шаблоны здесь? как распаковать выборочные файлы? –
Обратите внимание, что ant.unzip - простая оболочка вокруг существующей задачи удаления мусора. Параметры, которые вы даете, просто передаются напрямую. Дополнительную информацию см. В https://ant.apache.org/manual/Tasks/unzip.html. –
Эта статья расширяет пример AntBuilder.
http://preferisco.blogspot.com/2010/06/using-goovy-antbuilder-to-zip-unzip.html
Однако, как вопрос принципала - есть способ, чтобы выяснить все свойства, затворов, карты и т.д., которые могут быть использованы при изучении нового фасета в заводной/Java? Кажется, что есть масса действительно полезных вещей, но как разблокировать их скрытые сокровища? Теперь функции полного набора кода NetBeans/Eclipse кажутся безнадежно ограниченными в новом богатстве языков, который у нас есть.
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()
}
Unzip с помощью AntBuilder - хороший способ.
Второго варианта использовать библиотеку третьей стороны - я рекомендую Zip4j
Отлич- проект общего расширение предоставляет эту функциональность для Groovy 2.0 и выше: https://github.com/timyates/groovy-common-extensions
Хотя принимая постановка вопроса немного в другую сторону, я начал используя Groovy для DSL, который я создавал, но в конечном итоге использовал 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
В приведенной ниже заводной методы будут распаковать в определенную папку (C: \ папка). Надеюсь это поможет.
Действительно ли это все еще действительный вопрос/ответ? Что это за версия Groovy? – serverhorror