2011-09-13 58 views
1

我在Android上創建了一個應用程序,此應用程序將活動記錄到文件中。我有一個選項來導出文件,所以我將文件保存在.zip中。如果有多個文件要添加到.zip中,則會出現以下錯誤。Android 2.3通用標誌的ZIP問題

(通用標誌 - 本地:808十六進制中央:8十六進制)。 本地和中央GPFlags值不匹配。

這隻適用於Android 2.3並使用winzip或7zip。我可以繞過這個問題使用Windows資源管理器或WinRAR,但我想解決這個問題,而不是避免它。

它不會在Android 2.2設備上使用相同的應用程序。

我周圍搜索,發現一些關於加密的意見,但我沒有加密任何東西。我也發現了一些關於更新某些庫的評論,但我使用的是Android sdk 11和java jdk 1.6.0_25。

我試過2個不同的代碼具有相同的結果

int count = log_.getLogFileList(files_); 
if (count > 0) 
{      
String inFileName; 
File inFile; 
String phoneNumLast =OsmoService.getAccountString(OsmoService.context).substring(6); 
long date = files_.get(count - 1).lastModified(); 
SimpleDateFormat formatter = new SimpleDateFormat("MMddHHmmss");      
String outdt = new String(formatter.format(new Date(date))); 
String outFileName = new String("Dir Name" + "//" + "PREFIX" + "_" + outdt + ZIP_SUFFIX); 

File outFile = new File(outFileName);     
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(outFile)); 
BufferedOutputStream outBS = new BufferedOutputStream(zos, 8192); 

for (int idx = (count - 1); (idx >= 0) && !isCancelled(); idx--) 
{ 
inFile = files_.get(idx); 
BufferedReader inBR = new BufferedReader(new FileReader(inFile), 8192);      
inFileName = inFile.getName(); 
Log.v(LOG_TAG, "MailLogFiles - Zipping " + inFileName); 

zos.putNextEntry(new ZipEntry(inFileName)); 
int zix; 
while ((zix = inBR.read()) != -1) 
outBS.write(zix); 
outBS.flush();  
zos.closeEntry();  
inBR.close(); 
} 
outBS.close(); 

public static void compressFileList(String[] inFiles, String outFile) 
throws IOException 
{ 
ZipOutputStream zos = new ZipOutputStream(
new BufferedOutputStream(new FileOutputStream(outFile))); 
byte data[] = new byte[2048]; 

    for (int i = 0; i < inFiles.length; i++) 
    { 
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(inFiles[i])); 
    zos.putNextEntry(new ZipEntry(inFiles[i])); 
    int count; 
    while((count = in.read(data, 0, data.length)) != -1) 
     zos.write(data, 0, count); 
    zos.closeEntry(); 
    in.close(); 
    } 
    zos.close(); 
} 

回答