ZipEntry.isDirectory()判断错误

pre

在写一段涉及文件解压代码的时候遇到了ZipEntry.isDirectory()判断错误,导致解压代码把空文件夹当做文件处理的问题。
jdk: 1.8.0_144

问题代码

if (entry.isDirectory()) {
   new File(destDir + entry.getName()).mkdirs();
   continue;
}

问题分析

通过分析JDK源码可以确认问题愿意,在JDK中的isDirectory的判断逻辑就存在问题,在文件夹分隔符与写死的不一致时就会出现问题。

/**
* Returns true if this is a directory entry. A directory entry is
  * defined to be one whose name ends with a '/'.
  * @return true if this is a directory entry
  */
 public boolean isDirectory() {
     return name.endsWith("/");
 }

解决方案

借鉴JDK中的思路,自己写出符合跨平台要求的判断是否是文件夹的代码

if (entry.getName().endsWith(File.separator)) {
     new File(destDir + entry.getName()).mkdirs();
     continue;
 }

猜你喜欢

转载自blog.csdn.net/u010953266/article/details/80181692
今日推荐