我有一个应用程序,它下载一个zip并解压缩我SDCard上的文件.

一切正常,但是当我的同事在他的Mac(狮子)上创建zip文件时,我的所有文件都有

大小:-1

CRC:-1

compressedsize:-1

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

public class UnzipTask extends AsyncTask {

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来显示输出:

编辑:更新链接

解决方法:

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

~ $zipinfo -m test_mac.zip

Archive: test_mac.zip 1694 bytes 8 files

drwxr-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.html

drwxrwxr-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_win

8 files, 688 bytes uncompressed, 450 bytes compressed: 34.6%

~ $zipinfo -m test_win.zip

Archive: test_win.zip 1678 bytes 8 files

drwx--- 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.txt

drwx--- 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_win

drwx--- 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.txt

8 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,macos,zipfile,windows-7,osx-lion

来源: https://codeday.me/bug/20190901/1786627.html

android压缩工具 mac,Android解压缩在Mac上压缩的文件相关推荐

  1. android+4.2+mtp+在此设备上不支持+文件类型,Nexus 4无法通过MTP显示文件

    我试图将一个简单的XML文件简单地写入SD卡,但我注意到Nexus 4确实写入了该文件,但是使用Windows 7不能通过MTP协议查看该文件. 码: public void onCreate(Bun ...

  2. mac 下如何使用lrzsz 上传下载文件

    2019独角兽企业重金招聘Python工程师标准>>> 习惯直接上菜 可以直接看原文出处 first things first: lrzsz 不如scp 好用!!!but 小文件很方 ...

  3. 服务器学习之mac终端与远程服务器上传下载文件到本地

    Demo: 下载文件夹 scp -r root@110.255.255.52:/root/htmltitle (远程目录) 『空格』/Users/xxx/Desktop (本地目录) 下载文件 scp ...

  4. Ubuntu上压缩PDF文件的方法

    使用latex等生成pdf格式的文件时,若其中包含过多的高清图片,会导致PDF文件过大,不便于传输和存储.特别是论文投稿时候会对pdf大小有一定要求,这里介绍几种在linux平台下压缩PDF文件的工具 ...

  5. mac android屏幕演示,如何在Mac上录制Android设备的屏幕 | MOS86

    记录和捕获Android设备的屏幕比以前更容易.您现在可以使用多种工具来帮助您记录设备从使用ADB记录您的屏幕到使用AirDroid无线捕获屏幕截图,没有任何工具完成工作.其中一个很棒的实用程序是An ...

  6. mac 完全卸载android,关于macos:如何在Mac上完全卸载Android Studio?

    我最近在我的MacBook Pro上下载了Android Studio,每次打开它我都会搞砸它.它给了我插件错误和其他几个错误.我需要从我的Mac上完全卸载它.我试图从我的Mac上删除它,然后像第一次 ...

  7. mac android sdk manager速度慢,android - SDK Manager无法在Mac上打开 - 堆栈内存溢出

    当我尝试打开sdkmanager时,它在终端上说 inconsistent location '/Users/username/Library/Android/sdk/build-tools/28.0 ...

  8. 在Mac上使用android studio调试android手机

    一.环境准备 1.安卓手机:Android版本为9 2.MacBook Pro 3.安卓数据线 二.adb介绍 1.adb概念 adb:全称是Android Debug Bridge,意思是Andro ...

  9. mac android 真机调试

    1.已经安装好Androidstudio或者eclipse 2.下载配置好Android Sdk等 3.将android手机通过USB数据线连接Mac,打开终端输入system_profiler SP ...

最新文章

  1. 思科交换机Debug调试命令
  2. 模板方法(设计一个稳定的父类框架,框架中的有一些步骤是可变的,将可变的步骤子类中来实现)
  3. esxi所连交换机划vlan导致vm不能通讯
  4. 配置FTP服务-要点总结
  5. Codeforces Round #408 (Div. 2)
  6. sap idoc生成文件传到别的服务器,IDOC 实例详解
  7. 字符串之String类
  8. Libra 新编程语言 :Move 所有权模型灵感竟是来自它……
  9. 怎样增加phpmyadmin导入文件上限
  10. php 警告和错误屏蔽
  11. win8.1 64位安装oracle10g客户端心得
  12. 区块链开发(一)搭建基于以太坊的私有链环境
  13. webservice 完整视频教程
  14. matlab 三阶段dea模型,三阶段DEA模型SFA二阶段剔除过程
  15. 【笔试面试】75道逻辑推理题及答案
  16. 金属酞菁催化剂可促进氧还原反应
  17. 其实,我几乎很少看书!
  18. SpringBoot项目H5界面手机拍照调用腾讯云OCR卡证识别接口完整例子
  19. 用python画一个糖葫芦
  20. 【经验分享】20武汉理工计算机考研

热门文章

  1. 编译SOEM(Simle Open EtherCAT Master)-windows篇
  2. 淘宝运营,女装类目实操经验,女装类目日常运营优化攻略
  3. 当Kotlin邂逅设计模式之代理模式(二)
  4. 维基链WICC召集令
  5. python实现批量打开windows cmd
  6. SBAS-InSAR沉降监测
  7. 起势的 Serverless,正在挺进云计算的腹地深处
  8. 56个民族select下拉框
  9. 刘二PyTorch深度学习(一作业)
  10. 综合评价与决策方法(二)——模糊综合评判法