Compactar pasta e dividir a cada 5 MB em partes independentes

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);