为什么我的DECOM preSS类不作目录? [英] Why my decompress class don't make directories?

查看:127
本文介绍了为什么我的DECOM preSS类不作目录?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类来DECOM preSS文件,当拉链不具备的任何文件夹,它工作正常。如果是的话那么它只是引发错误。

赫斯我的类:

 公共类DECOM preSS
{
私人字符串_zipFile;
私人字符串_location;
ZipEntry的泽= NULL;公共DECOM preSS(字符串的压缩文件,字符串位置)
{
    _zipFile = zip文件;
    _location =位置;    _dirChecker();
}公共无效解压缩()
{
    尝试
    {
        的FileInputStream鳍=新的FileInputStream(_zipFile);
        ZipInputStream ZIN =新ZipInputStream(翅);
        而((ZE = zin.getNextEntry())!= NULL)
        {
            Log.v(DECOM preSS的,解压缩+ ze.getName());            如果(ze.isDirectory())
            {
                _dirChecker(ze.getName());
            }
            其他
            {
                FileOutputStream中FOUT =新的FileOutputStream(_location + ze.getName());
                对于(INT C = zin.read(!); C = -1; C = zin.read())
                {
                    fout.write(C);
                }                zin.closeEntry();
                fout.close();
            }        }
        zin.close();
    }
    赶上(例外五)
    {
        Log.e(DECOM preSS,解压,E);
    }}私人无效_dirChecker(字符串DIR)
{
    文件f =新的文件(_location +方向);    Log.d(DECOM preSS,f.getAbsolutePath()的toString());    如果(!f.isDirectory())
    }
        f.mkdirs();
    }
}

下面是我的logcat的:

 七月1日至7日:33:49.941 D / DECOM preSS(19375):/ SD卡/测试
7月1日至7日:33:49.941 V / DECOM preSS(19375):解压META-INF /
7月1日至7日:33:49.941 D / DECOM preSS(19375):/ SD卡/测试/ META-INF
7月1日至7日:33:49.941 V / DECOM preSS(19375):解压META-INF / CERT.RSA
7月1日至7日:33:49.949 E / DECOM preSS(19375):解压
7月1日至7日:33:49.949 E / DECOM preSS(19375):java.io.FileNotFoundException:/sdcard/test/META-INF/CERT.RSA:打开失败:ENOENT(没有这样的文件或目录)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在libcore.io.IoBridge.open(IoBridge.java:416)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在java.io.FileOutputStream中的<&初始化GT;(FileOutputStream.java:88)。
7月1日至7日:33:49.949 E / DECOM preSS(19375):在java.io.FileOutputStream中的<&初始化GT;(FileOutputStream.java:128)。
7月1日至7日:33:49.949 E / DECOM preSS(19375):在java.io.FileOutputStream中的<&初始化GT;(FileOutputStream.java:117)。
7月1日至7日:33:49.949 E / DECOM preSS(19375):在com.mycompany.myapp3.Decom press.unzip(DECOM press.java)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在com.mycompany.myapp3.MainActivity.onCreate(MainActivity.java)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.Activity.performCreate(Activity.java:5108)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2263)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.ActivityThread.access $ 600(ActivityThread.java:153)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1247)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.os.Handler.dispatchMessage(Handler.java:99)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.os.Looper.loop(Looper.java:137)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在android.app.ActivityThread.main(ActivityThread.java:5202)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在java.lang.reflect.Method.invokeNative(本机方法)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在java.lang.reflect.Method.invoke(Method.java:511)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:799)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在dalvik.system.NativeStart.main(本机方法)
7月1日至7日:33:49.949 E / DECOM preSS(19375):libcore.io.ErrnoException:产生的原因打开失败:ENOENT(没有这样的文件或目录)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在libcore.io.Posix.open(本机方法)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
7月1日至7日:33:49.949 E / DECOM preSS(19375):在libcore.io.IoBridge.open(IoBridge.java:400)
7月1日至7日:33:49.949 E / DECOM preSS(19375):... 19个


解决方案

好吧,我解决这个重写code。我真的不知道发生了什么监守它同样code。但现在它的伟大的工作。

I have a class to decompress files, it works fine when the zip doesn't have any folder inside. If it does then it just throw errors.

Hers my class:

public class Decompress
{
private String _zipFile;
private String _location;
ZipEntry ze = null;

public Decompress(String zipFile, String location)
{
    _zipFile = zipFile;
    _location = location;

    _dirChecker("");
}

public void unzip()
{
    try
    {
        FileInputStream fin = new FileInputStream(_zipFile);
        ZipInputStream zin = new ZipInputStream(fin);
        while ((ze = zin.getNextEntry()) != null)
        {
            Log.v("Decompress", "Unzipping " + ze.getName()); 

            if (ze.isDirectory())
            {
                _dirChecker(ze.getName());
            }
            else
            {
                FileOutputStream fout = new FileOutputStream(_location + ze.getName());
                for (int c = zin.read(); c != -1; c = zin.read())
                {
                    fout.write(c);
                }

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

        }
        zin.close();
    }
    catch (Exception e)
    {
        Log.e("Decompress", "unzip", e);
    }

}

private void _dirChecker(String dir)
{
    File f = new File(_location + dir);

    Log.d("Decompress", f.getAbsolutePath().toString());

    if (!f.isDirectory())
    }
        f.mkdirs();
    }
}

Here's my logcat:

01-07 07:33:49.941 D/Decompress(19375): /sdcard/test
01-07 07:33:49.941 V/Decompress(19375): Unzipping META-INF/
01-07 07:33:49.941 D/Decompress(19375): /sdcard/test/META-INF
01-07 07:33:49.941 V/Decompress(19375): Unzipping META-INF/CERT.RSA
01-07 07:33:49.949 E/Decompress(19375): unzip
01-07 07:33:49.949 E/Decompress(19375): java.io.FileNotFoundException: /sdcard/test/META-INF/CERT.RSA: open failed: ENOENT (No such file or directory)
01-07 07:33:49.949 E/Decompress(19375):     at libcore.io.IoBridge.open(IoBridge.java:416)
01-07 07:33:49.949 E/Decompress(19375):     at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
01-07 07:33:49.949 E/Decompress(19375):     at java.io.FileOutputStream.<init>(FileOutputStream.java:128)
01-07 07:33:49.949 E/Decompress(19375):     at java.io.FileOutputStream.<init>(FileOutputStream.java:117)
01-07 07:33:49.949 E/Decompress(19375):     at com.mycompany.myapp3.Decompress.unzip(Decompress.java)
01-07 07:33:49.949 E/Decompress(19375):     at com.mycompany.myapp3.MainActivity.onCreate(MainActivity.java)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.Activity.performCreate(Activity.java:5108)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2263)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.ActivityThread.access$600(ActivityThread.java:153)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
01-07 07:33:49.949 E/Decompress(19375):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-07 07:33:49.949 E/Decompress(19375):     at android.os.Looper.loop(Looper.java:137)
01-07 07:33:49.949 E/Decompress(19375):     at android.app.ActivityThread.main(ActivityThread.java:5202)
01-07 07:33:49.949 E/Decompress(19375):     at java.lang.reflect.Method.invokeNative(Native Method)
01-07 07:33:49.949 E/Decompress(19375):     at java.lang.reflect.Method.invoke(Method.java:511)
01-07 07:33:49.949 E/Decompress(19375):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
01-07 07:33:49.949 E/Decompress(19375):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
01-07 07:33:49.949 E/Decompress(19375):     at dalvik.system.NativeStart.main(Native Method)
01-07 07:33:49.949 E/Decompress(19375): Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
01-07 07:33:49.949 E/Decompress(19375):     at libcore.io.Posix.open(Native Method)
01-07 07:33:49.949 E/Decompress(19375):     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
01-07 07:33:49.949 E/Decompress(19375):     at libcore.io.IoBridge.open(IoBridge.java:400)
01-07 07:33:49.949 E/Decompress(19375):     ... 19 more

解决方案

Well I fix this rewriting the code. I don't really know what happened becuase its the same code. But now its working great.

这篇关于为什么我的DECOM preSS类不作目录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆