comprimir lista ficheros con nuevo nombre

public static void comprimirListaFicherosConNuevaRutaNombre(String rutaTemporalZIP, Hashtable rutasFicherosyNuevoNombre){
System.out.println(rutasFicherosyNuevoNombre.toString());
int BUFFER = 2048;
try{
rutaTemporalZIP = rutaTemporalZIP.replace('\\', '/');

//creo la ruta.
String rutaFolderZip = extraerRutaFicheroDeRutaCompleta(rutaTemporalZIP);
new File(rutaFolderZip).mkdirs();

BufferedInputStream origin = null;
FileOutputStream dest = new FileOutputStream(rutaTemporalZIP);
ZipOutputStream out = new ZipOutputStream( new BufferedOutputStream(dest));
// metodo de compresión
//out.setMethod(ZipOutputStream.DEFLATED);
byte data[] = new byte[BUFFER];

Enumeration enumerationRutas = rutasFicherosyNuevoNombre.keys();
ArrayList listRutas = Collections.list(enumerationRutas);

for(Iterator itr=listRutas.iterator(); itr.hasNext(); ){
String rutaFichero = (String) itr.next();
rutaFichero = rutaFichero.replace('\\', '/');
String nuevoNombreFichero = (String) rutasFicherosyNuevoNombre.get(rutaFichero);
ZipEntry entry;

FileInputStream fi = new FileInputStream(rutaFichero);
origin = new BufferedInputStream(fi, BUFFER);

entry = new ZipEntry(nuevoNombreFichero);
out.putNextEntry(entry);
int count;
while((count = origin.read(data, 0, BUFFER))!= -1){
out.write(data, 0, count);
}
origin.close();
}
out.close();
}
catch(IOException e){
e.printStackTrace();
}
}