ZIP Central Directory未列中间文件夹是否合法?条目合规性问询
ZIP格式深层路径文件的条目规范说明
我来帮你理清这个ZIP格式的疑问:
首先,ZIP文件里每个文件确实都会对应一个Central Directory头部,这是格式规范里明确的。但你提到的包含单个深层路径文件(比如foo/bar/baz.txt)的ZIP是否必须添加中间文件夹条目,这个点在APPNOTE里确实没有强制规定,属于规范的模糊地带。
实际使用中,两种实现都是被广泛认可的:
- 只添加
foo/bar/baz.txt这一个条目:不少轻量压缩工具会采用这种方式,解压时操作系统或者解压工具会自动识别路径里的层级,自动创建不存在的foo和foo/bar文件夹。 - 同时添加
foo/、foo/bar/和foo/bar/baz.txt三个条目:有些工具会生成这些单独的文件夹条目,主要是为了明确标记这些目录是特意创建的(哪怕是空目录),避免解压时出现歧义。
回到你关心的Java API实现判断:如果某个Java ZIP API只能处理带有明确文件夹条目的ZIP包,那这个实现是不够健壮的——因为规范并没有强制要求必须包含中间文件夹条目,完全符合规范的ZIP可能没有这些条目,合格的API应该能自动解析路径中的层级结构,在解压时自动创建所需的中间目录。反之,如果API能同时兼容两种情况,那就是符合规范预期的实现。
内容的提问来源于stack exchange,提问作者Murka
相关产品推荐
相关产品推荐

