0

我在解压缩文件时遇到问题,其中目录的名称末尾没有“/”。

如果文件内容是,则代码可以正常工作:

BASEDIR/
BASEDIR/file1.txt
BASEDIR/file2.txt

当中央目录的名称末尾不包含“/”时,出现错误。在这种情况下,zip 文件的内容是:

BASEDIR
BASEDIR/file1.txt
BASEDIR/file2.txt

这是我用来解压缩文件的代码

public static
void unzip(final String zipFilename, final String unzipDir)
        throws ZipException {

    ZipFile zipFile = null;
    try {
        final File directory = new File(unzipDir);
        // Check if the directory to extract to exists
        if(!directory.exists()) {
            // If not, create a new one.
            new File(unzipDir).mkdir();
        }

        final File checkFile = new File(zipFilename);
        if (checkFile.length() == 0) {
            throw new IOException("Empty file");
        }
        zipFile = new ZipFile(zipFilename);
        Enumeration<?> e = zipFile.entries();
        while(e.hasMoreElements()) {
            final ZipEntry entry = (ZipEntry)e.nextElement();
            final File destinationFile = new File(unzipDir,entry.getName());

            //create directories if required.
            destinationFile.getParentFile().mkdirs();

            //if the entry is directory, leave it. Otherwise extract it.
            if(entry.isDirectory()) {
                continue;
            }
            else {
                // Get the InputStream for current entry of the zip file using
                InputStream is = zipFile.getInputStream(entry);
                FileOutputStream fos = new FileOutputStream(destinationFile);
                writeFile(is, fos);
            }
        }
    }
    catch(Exception ex) {
        throw new ZipException("error", ex);
    }
    finally {
        if(zipFile!=null) {
            try {
                zipFile.close();
            }
            catch(Exception ex) {
                throw new ZipException("error", ex);
            }
        }
    }
}

我发现问题是 ZipEntry.isDirectory() 方法,该方法仅在 zip 中的条目名称以“/”结尾时才有效(http://docs.oracle.com/javase/6/docs/api/java/ util/zip/ZipEntry.html#isDirectory%28%29),所以它在第二种情况下不起作用。我无法找到解决此行为的方法。如何在不使用 isDirectory 方法的情况下检查条目是否为目录?(请注意,我不能使用第三方库)

4

0 回答 0