Java 使用ZipInputStream和IoUtils.copyStream()进行解压缩

Java 使用ZipInputStream和IoUtils.copyStream()进行解压缩,java,android,freeze,zipinputstream,Java,Android,Freeze,Zipinputstream,我试图以编程方式解压一个30 Mb的文件,这是我的脚本 public void unzip() { dirChecker(location); try { FileInputStream fin = new FileInputStream(zipFile); ZipInputStream zin = new ZipInputStream(fin); ZipEntry ze = null;

我试图以编程方式解压一个30 Mb的文件,这是我的脚本

public void unzip() {

        dirChecker(location);

        try {
            FileInputStream fin = new FileInputStream(zipFile);
            ZipInputStream zin = new ZipInputStream(fin);
            ZipEntry ze = null;
            while ((ze = zin.getNextEntry()) != null) {
                Log.v("Decompress", "Unzipping " + location+ze.getName());
                //create dir if required while unzipping
                if (ze.isDirectory()) {
                    dirChecker(ze.getName());
                } else {
                    FileOutputStream fout = new FileOutputStream(location + ze.getName());

                    IoUtils.copyStream(zin, fout);

                    zin.closeEntry();
                    fout.close();
                }

            }
            zin.close();
        } catch (Exception e) {
            System.out.println(e);
        }
}



private void dirChecker(String dir) {
    File f = new File(location + dir);

    if (!f.isDirectory()) {
        f.mkdirs();
    }
}
解压进行得很顺利,直到zip中的第24个文件,应用程序将挂起,而不会出现任何错误,只需在行中冻结即可:

 IoUtils.copyStream(zin, fout);
没有日志,没有异常记录,什么都没有。。。我发现正确的一行在尝试后放置了一个断点,并手动循环直到第24个文件到达。它是一个1.1mb jpg,我用winzip解压没有问题


有什么提示吗?

您应该关闭finally块中的资源,这样无论是否发生异常,它们都会被保证关闭。不过,这可能与你的问题无关。IoUtils是某个库的一部分还是android特有的东西?@David Conrad:是的。。我忘了。。。但不要解决我的问题…:正如我所说,我没有日志消息或stackTrace@DieterDPIoUtils是一个标准java类,但apache commons版本更为著名。您是否验证了它实际上与文件相关,而不是第24位?也许你可以同时打开的流的数量有一些限制?或者可能有东西阻塞了输出流-请尝试在zip中重命名文件。。。