2009-06-26 79 views
16

我使用java.util.Zip和java.util.ZipEntry成功将一个zip文件的内容添加到磁盘。我想维护在* nix文件系统上提取时设置的文件权限。使用JDK 5 api从压缩文件中提取时保持文件权限

任何人都可以指向“正确”的方式来做到这一点?

+0

我知道这是一个相当老的帖子,但你有没有解决这个问题? 我现在有同样的问题;它似乎只影响一个可执行文件到目前为止......当我“手工”解压缩权限是正确的 – dm76 2010-03-09 15:07:10

+0

我其实并没有解决它。我最后的方法向量是将apache的ant任务分开来处理zip文件并确定他们在做什么。 – 2010-03-10 15:56:27

+0

蚂蚁可以做到这一点,只有自1.8以来,在Java 6中使用Java.io.File的新功能(请参阅下面的答案) – dm76 2010-03-12 16:33:10

回答

1

这是很老,但因为我在这里结束了......

这个问题提供了大量的信息:creating a jar file - preserving file permissions

从本质上讲,你可以在邮编/罐不STORE(UNIX)文件权限文件,所以在解压缩jar时它们不能保存它们(当jar被创建时它们会丢失)。 如果您需要将文件权限保留在归档文件中并在进行提取时进行恢复,则需要考虑备选.tar或.tar.gz/.tar.bz2格式,该格式也由大多数Java构建工具本地支持(Ant,Gradle ,Maven ...)

8

我认为这实际上是不可能保持准确的权限。

权限非常特定于操作系统:虽然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或其他系统下运行,该方法将毫无用处。

相关问题