Java:以编程方式创建zip时缺少`A`存档属性

时间:2016-01-14 06:01:57

标签: java zip zipfile 7zip

我们正在处理解压缩库/实用程序,它使用属性来检查zip中是否存在目录/文件。

问题是我们无法在创建时为zip设置存档位。当我们以编程方式创建zip时,它也会清除以前的属性。

我们将尝试使用下面提到的步骤设置存档位,但到目前为止还没有获得所需的结果:

1. Parse each zip entry and getExtra byte[].
2. Use Int value=32 and perform bitwise 'OR' operation.
3. setExtra byte[] after 'OR' operation.

添加更多详情 我们尝试了以下方法,但仍未解决此问题。

  1. 在文件系统上使用setAttribute()方法,但在创建zip时获取属性正在重置。 Files.setAttribute(file, “dos:archive”, true)

  2. 使用File.copy()将与文件关联的文件属性复制到目标文件但不成功。甚至现有属性也不会保留到目标文件中。 Files.copy(path, path, StandardCopyOption.COPY_ATTRIBUTES)

  3. 使用ZipEntry.setExtra(byte[])。 在网上发现一些信息,java没有任何直接的方法来设置属性,但根据一些在线文章,我们发现额外的字段用于设置unix和MS DOS文件属性的文件权限。这是一个无证件的领域,我们没有在网上找到任何可靠的信息。基本上,最初的2个字节用于unix,最后2个字节用于DOS文件属性。我们尝试在其中设置具有不同值的DOS文件属性。 ZipEntry.setExtra(byte[]) - 为条目设置可选的额外字段数据。

  4. 使用winzip命令行工具,但不是优雅的解决方案。

1 个答案:

答案 0 :(得分:1)

我认为它是DOS(Windows)

使用Java 7

import java.nio.file.Files;
import java.nio.file.Path;

File theFile = new File("yourfile.zip");
Path file = theFile.toPath();
Files.setAttribute(file, "dos:archive", true);

请参阅:http://kodejava.org/how-do-i-set-the-value-of-file-attributes/