使用 java.util.ZipFile 在同一层次结构中解压缩 zip 文件
给定一个具有多个嵌套目录结构的 zip 文件,如何将其解压缩到相同的树结构中? ZipFile.entries() 是否以任何顺序提供枚举?
given a zip file with multiple nested directory structure, how do I unzip it into the same tree structure?
does ZipFile.entries() provide the enumeration in any order?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这是我的。
在文件中指定要扩展的文件
在目标目录中,您必须将目标位置指定为“new File(”/tmp/foo/bar”)”。如果你想在当前目录中解压,你可以指定 targetDir = new File(".")
为我工作。祝你好运。
This is mine.
In file you specify the file you want to expand
in target dir you have to specify the target location as "new File("/tmp/foo/bar")". If you want to extract in the current directory you can specify targetDir = new File(".")
Worked for me. Good luck.
这是我经常使用的一个。在复制/粘贴后以及在任何情况下它都应该直接工作。
Here's the one I use all the times. It should directly work after a copy/paste and in any circumstances.
Zip 本身不提供目录结构。类似树的结构是通过每个条目的完整路径来构建的。 ZipFile 枚举条目的方式与将条目添加到文件中的方式相同。
注意:java.util.ZipEntry.isDirectory() 只是测试名称的最后一个字符是否为“/”,这就是它的工作原理。
您需要将文件解压到同一目录中。解析然后这样命名:
或多或少应该可以做到这一点(您仍然需要处理重复的文件名等)
Zip doesn't offer directory structure per se. The tree alike structure is built by having full path of each entry. ZipFile enumerates the entries in the same way they have been added to the file.
Note: java.util.ZipEntry.isDirectory() just tests if the last character of the name is '/', that's how it works.
What you need to extract the files into the same directory. Parse then name like that:
That shall do it more or less (you still need to take care of duplicate file names, etc)
为什么你关心秩序?
如果 ZipFile 条目的名称为
/a/b/c/file.txt
,那么您可以计算出目录名称/a/b/c
,然后创建一个树中名为a/b/c
的目录。Why do you care about order?
If the ZipFile entry has a name
/a/b/c/file.txt
, then you can work out the directory name/a/b/c
and then create a directory in your tree calleda/b/c
.