Android创建的Zip不包含文件大小

时间:2015-12-03 13:34:08

标签: android zip

我已经通过创建压缩文件来为我的应用程序存档用户数据。

我创建了这样的压缩文件:

try
{
    int iBufferSize = 2048;
    int iByteCount = 0;
    byte btData[] = new byte[iBufferSize];
    File fZipFile = new File(ARCHIVE_FILE);
    FileOutputStream fos = new FileOutputStream(fZipFile);
    ZipOutputStream zos = new ZipOutputStream(fos);

    BufferedInputStream bis = null;
    FileInputStream fIn = null;
    ZipEntry ze = null;
    File[] fPartitions = new File(FILES_PATH).listFiles();
    for(File fPartition : fPartitions)
    {
        lFileSize = fPartition.length();
        fIn = new FileInputStream(fPartition);
        bis = new BufferedInputStream(fIn, iBufferSize);
        ze = new ZipEntry(fPartition.getName());
        ze.setSize(lFileSize);
        zos.putNextEntry(ze);
        while((iByteCount = bis.read(btData, 0, iBufferSize)) != -1)
        {
            zos.write(btData, 0, iByteCount);
        }
        bis.close();
        zos.closeEntry();
    }
    zos.close();

    bis.close();
    fIn.close();
    bOk = true;
}
catch(Exception e)
{
    e.printStackTrace();
}

现在,当我尝试恢复内容时,我无法获得原始文件大小。以下是我进行扩展的方式:

try
{
    // open the archive
    FileInputStream fis = new FileInputStream(fArchive);
    ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
    bBuffer = new byte[2048];

    // iterate through all files, putting them back into the same place
    ze = zis.getNextEntry();
    while(ze != null)
    {
        strFileName = ze.getName();
        strFileName = FILE_PATH + "/" + strFileName;
        fCheck = new File(strFileName);
        lZipFileSize = ze.getSize(); // <--- returns -1 systematically
        lTargetFileSize = fCheck.length();
        fCheck = null;
        FileOutputStream fos = new FileOutputStream(strFileName);

        // read the data
        while((iCount = zis.read(bBuffer)) != -1)
        {
            fos.write(bBuffer, 0, iCount);
        }
        fos.close();

        ze = zis.getNextEntry();
    }
    zis.close();
    fis.close();
    bOk = true;
}
catch(Exception e)
{
    e.printStackTrace();
}

我注意到ze.getSize()系统地返回-1。

如何存储和获取单个文件大小?

1 个答案:

答案 0 :(得分:0)

好的,所以如果你遇到这个问题,我就是这样解决的。

使用ZipFile类读取zip文件。 灵感来自ZipInputStream: getting file size of -1 when readingThe ZipFileTest.java Android example source code