Creo que en realidad es imposible mantener los permisos correctamente.
Los permisos son muy específicos del sistema operativo: mientras que los permisos del archivo POSIX permiten al usuario establecer si se puede leer, escribir o ejecutar un archivo para el propietario del archivo, el grupo y otros, el sistema de archivos NTFS para un permiso de ejecución es inexistente. Y el sistema de archivos FAT/FAT32 inicial, no tiene permisos de archivos en absoluto (una parte del atributo de solo lectura).
El ser multiplataforma, sería difícil para Java para establecer el permiso correctamente en los archivos recién creados (descomprimidos), dependiendo del sistema operativo subyacente ....
Dicho esto, Java 6 tiene un nuevo java .io.File clase que le permite establecer permisos (con métodos como setExecutable(), setReadable(), etc ... ver http://java.sun.com/javase/6/docs/api/java/io/File.html)
Estos me ayudaron mucho, especialmente el setExecutable() que era mi principal preocupación al tener que descomprimir ejecutables en un sistema de archivos Linux. Y no tiene que preocuparse por averiguar en qué sistema operativo se está ejecutando, ya que el método simplemente no hará nada si se ejecuta en Windows u otros sistemas sin el concepto de archivos ejecutables.
Sé que esta es una publicación bastante antigua pero ¿ha resuelto ese problema? Estoy teniendo el mismo problema ahora mismo; Solo parece afectar un archivo ejecutable hasta el momento ... cuando lo descomprimí "a mano" el permiso es correcto – dm76
No lo he resuelto de hecho. Mi último vector de acercamiento iba a ser separar la tarea ant de apache para manipular archivos zip y determinar qué están haciendo. –
Ant puede hacer eso solo desde 1.8, usando la nueva característica de Java.io.File en java 6 (ver mi respuesta a continuación) – dm76