java.util.zip.ZipException:找不到中央目录条目

时间:2011-04-12 16:24:28

标签: java android sockets zipfile galaxy-tab

我有一个代码在模拟器上运行得非常好但是当我在三星Galaxy Tab上运行它时,它会给出异常。
我从服务器通过套接字接收一个压缩的zip文件,而不是我提取这些文件。如果我压缩并发送两个或三个文本文件,它在模拟器和Galaxy Tab上运行正常 但是如果我压缩并发送一些带有文本或两个图像文件的小图像文件,它会给出:> java.util.zip.ZipException:找不到中央目录条目<在Galaxy Tab上但在模拟器上没有错误。 Zip文件大小不超过32 KB,我确信正在正确接收文件。这是我的压缩程序代码

package com.vsi.vremote;

import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

import android.content.Context;
import android.util.Log;

public class UnCompressor {
    private static final String TAG = "UnCompressor";
    Context context;

    public UnCompressor(Context context) {
        this.context = context;
    }

    private final void copyInputStream(InputStream in, OutputStream out)

    throws IOException {
        byte[] buffer = new byte[1024];
        int len;

        while ((len = in.read(buffer)) >= 0)
            out.write(buffer, 0, len);

        in.close();
        out.close();
    }

    public final String[] unCompress(String name) {
        try {
            Log.d(TAG, "Uncompress called");

            ZipFile zipFile = new ZipFile(context.getFileStreamPath(name));
            Log.d(TAG, "Zip file created");
            Enumeration entries = zipFile.entries();
            String fileNames[] = new String[zipFile.size()];
            int counter = 0;

            Log.d(TAG, "Loop strting");
            while (entries.hasMoreElements()) {
                Log.d(TAG, "Getting next entry");
                ZipEntry entry = (ZipEntry) entries.nextElement();

                Log.d(TAG, "Extracting file: " + entry.getName());
                copyInputStream(
                        zipFile.getInputStream(entry),
                        new BufferedOutputStream(context.openFileOutput(
                                entry.getName(), Context.MODE_PRIVATE)));
                fileNames[counter++] = entry.getName();
            }
            zipFile.close();
            return fileNames;

        } catch (IOException ioe) {
            System.err.println("Unhandled exception:");
            ioe.printStackTrace();
            return null;
        }
    }

    public final void delete(String fileName) {
        context.deleteFile(fileName);
    }
}

注意:我刚刚在我的HTC WildFire上查看了它,它也在使用这款手机但Galaxy TAB :(

2 个答案:

答案 0 :(得分:0)

看看这是否与Central Directory Entry not found (ZipException)相关,看看答案是否有用

答案 1 :(得分:0)

enter image description here

它只将这些文件添加到一个zip文件中(参见screenshow),但我必须从那些zip文件部分制作一个zip文件。我只是将我的zip文件分成几部分并上传到服务器上。现在我想在我的应用程序中下载这些文件,并将zip文件重建到应用程序中。