Tenho uma classe que consegui que faz a compactação de uma pasta e seu conteúdo, mas precisava que fosse compactado e que se o amanho do zip sendo criado ultrapassar determinado tamanho , por exemplo 5 mb, fosse dividido em partes, mas de forma que uma parte não dependesse da outra para posteriormente ser extraído.
Pensei em dividir o conteúdo em duas ou mais pastas ( não manualmente mas no código fonte) antes de compactar ou compactar da forma em que as partes são dependentes, depois descompactar cada uma ( em pastas separadas) e compactar as pastas separadas de forma que
não seja necessário as partes estarem juntas para que se possa então fazer a descompactação
mas não consegui elaborar nada ainda.
Não sei se fui suficientemente claro, mas se alguém tiver algum exemplo dica eu agradeço.
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;
public class ZipCompress {
public static void compress(String dirPath, String zipName,String path) {
Path sourceDir = Paths.get(dirPath);
String zipFileName = path+zipName.concat(".zip");
try {
ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) {
try {
Path targetFile = sourceDir.relativize(file);
outputStream.putNextEntry(new ZipEntry(targetFile.toString()));
byte[] bytes = Files.readAllBytes(file);
outputStream.write(bytes, 0, bytes.length);
outputStream.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
return FileVisitResult.CONTINUE;
}
});
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
trecho no método que chama esta classe
String path = “D:\Faturas\”;
ZipCompress.compress(“D:\Faturas\Gerados\”, jTNomeZip.getText(), path);