我有一個應用程序,用於下載zip文件並解壓縮我的SD卡上的文件。 一切工作正常,但是當我collegue建立在他的Mac(獅子)的zip文件,我的所有文件都Android解壓縮在Mac上壓縮的文件
尺寸:-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)唯一的問題是o位於Android我不能解壓縮zip文件中的MAC創建...
問題:
有誰知道爲什麼這是在Mac上拉鍊的zip文件具有這些無效的大小?我的解壓縮過程(在Android上)是否缺少一些代碼?
您可以在這裏下載拉鍊,如果你想,還有一個非常小的apk顯示輸出:
編輯:更新的鏈接
您的虛擬主機已暫停下載示例zip文件。 – Barend 2012-08-13 18:13:07
謝謝!我已經更新了示例文件。 – Entreco 2012-08-13 19:51:50