我使用java.util.Zip和java.util.ZipEntry成功将一个zip文件的内容添加到磁盘。我想维护在* nix文件系统上提取时设置的文件权限。使用JDK 5 api从压缩文件中提取时保持文件权限
任何人都可以指向“正确”的方式来做到这一点?
我使用java.util.Zip和java.util.ZipEntry成功将一个zip文件的内容添加到磁盘。我想维护在* nix文件系统上提取时设置的文件权限。使用JDK 5 api从压缩文件中提取时保持文件权限
任何人都可以指向“正确”的方式来做到这一点?
这是很老,但因为我在这里结束了......
这个问题提供了大量的信息:creating a jar file - preserving file permissions
从本质上讲,你可以在邮编/罐不STORE(UNIX)文件权限文件,所以在解压缩jar时它们不能保存它们(当jar被创建时它们会丢失)。 如果您需要将文件权限保留在归档文件中并在进行提取时进行恢复,则需要考虑备选.tar或.tar.gz/.tar.bz2格式,该格式也由大多数Java构建工具本地支持(Ant,Gradle ,Maven ...)
来看看通用压缩:
http://commons.apache.org/compress/
,并期待在TarArchiveEntry,像你想它应该保留文件的权限。
TarArchiveEntry entry = tarInput.getNextTarEntry();
http://commons.apache.org/compress/apidocs/index.html
我想我已经疯了下议院...
我认为这实际上是不可能保持准确的权限。
权限非常特定于操作系统:虽然POSIX文件权限允许用户设置是否可以读取,写入或执行文件所有者,组和其他人的文件,但NTFS文件系统具有类似的系统,但概念对于执行权限是不存在的。而早期的FAT/FAT32文件系统根本没有文件权限(只读属性中的一部分)。
作为跨平台的,这将是困难的Java来正确设置权限上取决于底层的操作系统上新创建(解压)文件....
也就是说,Java 6中有一个新的Java .io.File类,允许你设置权限(与像setExecutable(),setReadable()等方法......看到http://java.sun.com/javase/6/docs/api/java/io/File.html)
这对我帮助很大,尤其是setExecutable(),这是我的主要关注当必须在Linux文件系统上解压缩可执行文件时。而且,您不必担心如何计算出您正在运行的操作系统,因为如果在没有可执行文件的概念的情况下在Windows或其他系统下运行,该方法将毫无用处。
我知道这是一个相当老的帖子,但你有没有解决这个问题? 我现在有同样的问题;它似乎只影响一个可执行文件到目前为止......当我“手工”解压缩权限是正确的 – dm76 2010-03-09 15:07:10
我其实并没有解决它。我最后的方法向量是将apache的ant任务分开来处理zip文件并确定他们在做什么。 – 2010-03-10 15:56:27
蚂蚁可以做到这一点,只有自1.8以来,在Java 6中使用Java.io.File的新功能(请参阅下面的答案) – dm76 2010-03-12 16:33:10