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

标签 java zip 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(路径,路径,StandardCopyOption.COPY_ATTRIBUTES)

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

  4. 使用 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/

相关文章:

java - 安卓应用程序 : Java crash when clicking on button that should display a random image

java - 如何将用户值从一个 fragment 传递到另一个 fragment

java - ZipOutputStream 相对路径

c# - 是否可以并行下载和解压?

c++ - 在内存中创建文件,然后使用 7-zip 命令行将它们推送到 zip 存档中?

java - 如何以编程方式终止liferay中的 session /注销其他用户

java - 哪个工具可以为 javac 的输出着色?

vba - 使用 Excel VBA 压缩文件会产生一个空存档

bash - 将状态(文件完整性)检查添加到 cbr cbz 转换 bash 脚本

java - 如何修复OutOfMemoryError android studio