Android解压缩在Mac上压缩的文件

Android解压缩在Mac上压缩的文件,第1张

概述我有一个应用程序,它下载一个zip并压缩我SDCard上的文件.一切正常,但是当我的同事在他的Mac(狮子)上创建zip文件时,我的所有文件都有大小:-1CRC:-1compressedsize:-1我无法将文件写入我的SD卡.两个拉链具有完全相同的内容,唯一的区别在于它们最初压缩的位置.这是我解压缩文件的

我有一个应用程序,它下载一个zip并解压缩我SDCard上的文件.
一切正常,但是当我的同事在他的Mac(狮子)上创建zip文件时,我的所有文件都有

大小:-1

CRC:-1

compressedsize:-1

我无法将文件写入我的SD卡.两个拉链具有完全相同的内容,唯一的区别在于它们最初压缩的位置.这是我解压缩文件的代码:

public class UnzipTask extends AsyncTask<String, Integer, VoID> {    private static final String TAG = UnzipTask.class.getSimplename();    private String mDestLocation;    private ZipListener mListener;    private Context mCtx;    private int mCallbackID;    public UnzipTask(Context context, ZipListener Listener, file dir)    {        mCtx = context;        mListener = Listener;        mDestLocation = dir.getabsolutePath() + "/";    }    public voID setID(int ID)    {        mCallbackID = ID;    }    @OverrIDe    protected VoID doInBackground(String... arg0) {        try {            String file = arg0[0];            inputStream is = mCtx.getAssets().open(file);            unzipfile(is);        } catch (IOException e) {            e.printstacktrace();        } catch (Exception e) {            e.printstacktrace();        }        return null;    }    /**     * Private function that ensures a directory exist     * @param dir     */    private voID _dirChecker(String dir) {        file f = new file(mDestLocation + dir);        if (!f.isDirectory()) {            f.mkdirs();            }    }    private voID unzipfile(inputStream input) throws Exception {        ZipinputStream zin = new ZipinputStream(input);        ZipEntry ze = null;        while ((ze = zin.getNextEntry()) != null) {            Log.v(TAG, "UnzipPing " + ze.getname());            if(mListener != null)            {                mListener.onUnzipped(mCallbackID, ze.getname(), ze.g   etSize(), ze.getCrc(), ze.getCompressedSize());                }            if (ze.isDirectory()) {                _dirChecker(ze.getname());            } else if (ze.getCompressedSize() > 0 && ze.getSize() > 0 && ze.getCrc() != 0.0) {                // If size=-1 -> writing to disk fails                String fileOutput = mDestLocation + ze.getname();                fileOutputStream fout = new fileOutputStream(fileOutput);                int read = 0;                byte[] buffer = new byte[(int) ze.getSize()];                while ((read = zin.read(buffer)) >= 0) {                    fout.write(buffer, 0, read);                }                zin.closeEntry();                fout.close();                } else {                Log.v(TAG, "SkipPing entry" + ze.getname());            }             }        }        zin.close();    }}

几个笔记

1)我可以在windows 7上解压缩这两个文件

2)我的同事可以在他的Mac上解压缩这两个文件

3)唯一的问题是,在AndroID上我无法解压缩MAC创建的zip文件…

题:

有谁知道为什么在Mac上压缩的zip文件有这些无效的大小?我的解压缩过程(在AndroID上)是否遗漏了一些代码?

如果你愿意,你可以在这里下载拉链,以及一个非常小的apk来显示输出:

编辑:更新链接

Zip file (zipped on a Mac)

Zip file (zippen on Win7)

Demo.apk

解决方法:

该问题与版本有关.让我从我的Mac(10.8)的一些输出开始:

~ $zipinfo -m test_mac.zip Archive: test_mac.zip   1694 bytes   8 filesdrwxr-xr-x  2.1 unx        0 bx  0% stor 10-Aug-12 01:11 test_win/-rwxr-xr-x  2.1 unx       46 bX 20% defN 10-Aug-12 01:11 test_win/index.HTMLdrwxrwxr-x  2.1 unx        0 bx  0% stor 10-Aug-12 01:12 __MACOSX/drwxrwxr-x  2.1 unx        0 bx  0% stor 10-Aug-12 01:12 __MACOSX/test_win/-rw-r--r--  2.1 unx      211 bX 37% defN 10-Aug-12 01:11 __MACOSX/test_win/._index.HTML-rwxr-xr-x  2.1 unx        9 bX-21% defN 10-Aug-12 01:10 test_win/version.txt-rw-r--r--  2.1 unx      211 bX 37% defN 10-Aug-12 01:10 __MACOSX/test_win/._version.txt-rw-r--r--  2.1 unx      211 bX 37% defN 10-Aug-12 01:11 __MACOSX/._test_win8 files, 688 bytes uncompressed, 450 bytes compressed:  34.6%~ $zipinfo -m test_win.zip Archive: test_win.zip   1678 bytes   8 filesdrwx---     3.1 fat        0 bx  0% stor 10-Aug-12 09:11 test_win/-rw-a--     3.1 fat       46 bx 20% defN 10-Aug-12 09:11 test_win/index.HTML-rw-a--     3.1 fat        9 bx-21% defN 10-Aug-12 09:10 test_win/version.txtdrwx---     3.1 fat        0 bx  0% stor 10-Aug-12 09:12 __MACOSX/-rw-a--     3.1 fat      211 bx 37% defN 10-Aug-12 09:11 __MACOSX/._test_windrwx---     3.1 fat        0 bx  0% stor 10-Aug-12 09:12 __MACOSX/test_win/-rw-a--     3.1 fat      211 bx 37% defN 10-Aug-12 09:11 __MACOSX/test_win/._index.HTML-rw-a--     3.1 fat      211 bx 37% defN 10-Aug-12 09:10 __MACOSX/test_win/._version.txt8 files, 688 bytes uncompressed, 450 bytes compressed:  34.6%

看看第二个字段(mac文件中的2.1和win文件中的3.1).这是压缩文件的ZIP存档格式版本. java.util.zip实现仅支持版本2.50及更高版本的ZIP文件格式(请参阅此StackOverflow).

Mac的Compress …菜单选项使用低于Java实现支持的版本(2.1仍然在10.8中使用).

告诉你的同事使用命令行工具(例如zip -r myfile.zip directory_to_compress /),你应该得到AndroID应用程序可以膨胀的输出.

总结

以上是内存溢出为你收集整理的Android解压缩在Mac上压缩的文件全部内容,希望文章能够帮你解决Android解压缩在Mac上压缩的文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1106049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存