
com.github.tools1000.Zipper Maven / Gradle / Ivy
package com.github.tools1000;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Getter
@Setter
@Slf4j
public class Zipper {
final static int DEFAULT_BUFFER_SIZE = 1024;
private int bufferSize;
public Zipper(){
this.bufferSize = DEFAULT_BUFFER_SIZE;
}
// zip a directory, including sub files and sub directories
public Path zipFolder(Path source) throws IOException {
// get folder name as zip file name
String zipFileName = source.getFileName().toString() + ".zip";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileName))) {
zos.putNextEntry(new ZipEntry(source.getFileName().toString()));
Files.walkFileTree(source, new SimpleFileVisitor() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) {
// only copy files, no symbolic links
if (attributes.isSymbolicLink()) {
return FileVisitResult.CONTINUE;
}
try (FileInputStream fis = new FileInputStream(file.toFile())) {
Path targetFile = source.relativize(file);
zos.putNextEntry(new ZipEntry(targetFile.toString()));
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
zos.closeEntry();
} catch (IOException e) {
log.error("Cannot zip file {}", file, e);
return FileVisitResult.TERMINATE;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
log.error("Unable to zip: {}", file, exc);
return FileVisitResult.TERMINATE;
}
});
}
return Paths.get(zipFileName);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy