Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Groovy & Grails > groovy create a zip archive


Автор: Samotnik 5.2.2010, 11:32
САБЖ. 
Нужно создать zip  на groovy. С groovy не знаком. Но нашел вот такой код
Код

import java.util.zip.ZipOutputStream
import java.util.zip.ZipEntry
import java.nio.channels.FileChannel

String zipFileName = "file.zip"
String inputDir = "logs"

ZipOutputStream zipFile = new ZipOutputStream(new FileOutputStream(zipFileName))
new File(inputDir).eachFile() { file ->
zipFile.putNextEntry(new ZipEntry(file.getName()))
def buffer = new byte[1024]
file.withInputStream { i ->
def l = i.read(buffer)
// check wether the file is empty
if (l > 0) {
zipFile.write(buffer, 0, l)
}
}
zipFile.closeEntry()
}
zipFile.close()

Я был бы очень признательный хотя бы за объясение его (В частности меня очень интересует опреатор -> ). Либо помощь в следующем. Сейчас этот код создает архив file.zip и ложит туда файлы из папки logs 
Мне нужно,  создать иеррархию папок в архиве. Как це сделать ? 

Автор: serger 6.2.2010, 12:21
-> - это замыкание.
Пиши как на java и не мучайся - groovy понимает синтакис java.

Добавлено через 5 минут и 13 секунд
Код

new File(inputDir).eachFile() { file -> ... }


Этот для каждого результата вызова метода eachFile, представленного в виде file - вызывает код после "->".

Добавлено через 9 минут и 4 секунды
соответственно file нужен для работы над результатом...
Описание, например, тут:
http://blog.alno.name/2008/06/using-groovy-2/

зы: мне это чем-то напоминает пример работы с итераторами на java:
for(String s:ss){
}
только гибчее. Или я заблуждаюсь?..

Автор: magicfly 8.2.2010, 12:27
Да, похоже но явно гибче например
 
Код

var strArray=...
var firstChars=strArray.collect{it[0]}

теперь в firstChars содержатся первые символы всех строк

Автор: magicfly 15.2.2011, 17:58
Как можно писать на груви не знать замыканий? 
Можно посмотреть на этом примере:
Получается коллекция первых букв :strArray.collect{it[0]}
strArray.collect{str->str[0]} - тоже самое

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)