ZipEntry 的路径名的文件分隔符?

2022-09-01 13:06:27

ZIP条目存储条目的完整路径名,因为(我确定下一部分)ZIP存档没有组织为目录。元数据包含有关如何存储文件(在目录内)的信息。

如果我在Windows中创建ZIP文件,当我在另一个操作系统(例如Mac OS X)中解压缩数据时,文件结构将保持以前在Windows中的状态。这是因为解压缩器旨在处理此问题,还是因为ZIP内部的文件分隔符是标准的?

我问这个是因为我试图使用压缩文件的名称在ZIP文件内找到一个条目。但是,我应该使用哪个文件分隔符来使其在Windows以外的系统中工作?

我正在使用Java,方法:使用Windows文件分隔符为我提供路径。如果我使用java分隔符使其在另一个操作系统上工作就足够了吗?还是我必须尝试使用每个可能的分隔符查找我的文件?.getName()ZipEntry\File.separator

荣誉正确答案奖

@Eren Yilmaz给出的答案是正确的,它描述了许多工具(甚至是你可以自己编码的工具)的功能。但是,鉴于.zip标准清楚地记录了它必须如何,因此必须更新正确答案。


答案 1

.zip文件规范指出:

4.4.17.1 文件名,带有可选的相对路径。存储的路径不得包含驱动器号或设备号或前导斜杠。所有斜杠都必须是正斜杠'/',而不是后斜杠'\',以便与Amiga和UNIX文件系统等兼容。如果输入来自标准输入,则没有文件名字段。


答案 2

文件分隔符取决于创建 zip 文件的应用程序。一些应用程序使用系统文件分隔符,而有些应用程序使用“文明”正斜杠“/”。因此,如果您正在创建zip文件,然后使用它,那么您可以简单地使用正斜杠作为文件分隔符。如果zip文件是在其他地方创建的,那么你应该找出使用了哪个分隔符。我不知道一个简单的方法,但你可以使用一个野蛮的方法,并在你前进的过程中检查出两种分隔符类型。

某些应用程序(尤其是自定义邮政编码创建代码)可以在不同的 zip 条目上混合使用分隔符,因此请不要忘记签出每个条目。


推荐