我们正在处理解压缩库/实用程序,它使用属性来检查 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.
添加更多详细信息: 我们尝试了以下方法,但这个问题仍然没有解决。
在文件系统上使用
setAttribute()
方法,但在创建 zip 时获取属性会被重置。Files.setAttribute(file, “dos:archive”, true)
使用
File.copy()
将与文件关联的文件属性复制到目标文件,但没有成功。即使现有属性也不会保留到目标文件中。Files.copy(路径,路径,StandardCopyOption.COPY_ATTRIBUTES)
使用
ZipEntry.setExtra(byte[])
。 在网上找到一些信息,java没有任何直接的方法来设置属性,但根据一些网上文章,我们发现额外的字段用于设置unix和MS DOS文件属性的文件权限。这是一个没有记录的领域,我们在网上找不到任何可靠的信息。基本上,前 2 个字节用于 unix,最后 2 个字节用于 DOS 文件属性。我们尝试使用不同的值设置 DOS 文件属性。ZipEntry.setExtra(byte[])
- 设置条目的可选额外字段数据。使用 winzip 命令行工具,但不是一个优雅的解决方案。
最佳答案
我假设它是 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/
关于Java: `A` 以编程方式创建 zip 时缺少存档属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34782653/