Как добавить уже имеющиеся на пк файлы в zip архив при помощи логики java\groovy?
Есть код, необходимо за время одной итерации записать еще 3 файла в архив, они статичные, не нуждаются в параметризации.
import java.nio.charset.StandardCharsets
def destination = new java.util.zip.ZipOutputStream(new FileOutputStream(new File('request' + ${__Random(100000,200000,)} + '.zip')), StandardCharsets.UTF_8)
destination.putNextEntry(new java.util.zip.ZipEntry(prev.getSampleLabel() + '.xml'))
destination << prev.getSamplerData().getBytes(StandardCharsets.UTF_8)
destination.close()
Пробовал добавить таким способом
List<String> filePaths = Arrays.asList("/absolute/path/file1.txt", "/absolute/path/file2.txt");
String zipPath = "/absolute/path/output.zip";
try (ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipPath))) {
for (String filePath : filePaths) {
File fileToZip = new File(filePath);
zipOut.putNextEntry(new ZipEntry(fileToZip.getName()));
Files.copy(fileToZip.toPath(), zipOut);
}
}
Но видимо логика не подходит.
Ответы (1 шт):
Видимо, "логика" не подходит потому что, видимо, логики в ваших действиях нет. Копирование кода из интернета без понимания что этот код делает - не лучший способ освоить язык программирования.
Код нормально работает сам по себе (создание нового архива) если добавить соответствующие импорты:
import java.util.zip.ZipEntry
import java.util.zip.ZipOutputStream
import java.nio.file.Files
Если вы хотите добавить файлы в уже существующий архив - "логика" не будет работать потому что это невозможно на уровне API Java, вам нужно открыть "старый" архив, вытащить оттуда все ZipEntry, добавить новые и либо перезаписать предыдущий файл или сохранить под новым именем. Или использовать сторонние библиотеки типа TrueZip или 7-Zip-JBinding
Проще будет добавить сразу все одним махом в один архив в Groovy
import java.nio.charset.StandardCharsets
def destination = new java.util.zip.ZipOutputStream(new FileOutputStream(new File('request' + ${__Random(100000,200000,)} + '.zip')), StandardCharsets.UTF_8)
destination.putNextEntry(new java.util.zip.ZipEntry(prev.getSampleLabel() + '.xml'))
destination << prev.getSamplerData().getBytes(StandardCharsets.UTF_8)
def files = ['/absolute/path/file1.txt', '/absolute/path/file2.txt']
files.each { filename ->
def file = new File(filename)
destination.putNextEntry(new java.util.zip.ZipEntry(file.getName()))
destination << file.bytes
}
destination.close()