Функция распаковки Android не работает

Следующая функция распаковки не работает для всех zip-файлов.

Мой шаблон zip-файла выглядит следующим образом:

  1. Zip-файл содержит один XML-файл и одну папку (имя- «изображения»).
  2. Имя файла xml совпадает с именем файла zip.
  3. Папка («изображения») может содержать или не содержать какие-либо файлы.

Я проверил файл xml, прежде чем поместить его в zip-файл.

Он выдает исключение в этой строке для некоторых zip-файлов:

FileOutputStream fout = new ileOutputStream(path.substring(0,path.length()-4)+"/"+filename);

Функция:

public boolean unZip(String path)
{       
    InputStream is;
    ZipInputStream zis;
    try 
    {
        String filename;
        is = new FileInputStream(path);
        zis = new ZipInputStream(new BufferedInputStream(is));   
        ZipEntry ze;
        byte[] buffer = new byte[1024];
        int count;

        while ((ze = zis.getNextEntry()) != null) 
        {
            filename = ze.getName();
            if (ze.isDirectory()) {
                File fmd = new File(path.substring(0,path.length()-4)+"/"+filename);
                fmd.mkdirs();
                continue;
            }

            FileOutputStream fout = new FileOutputStream(path.substring(0,path.length()-4)+"/"+filename);

            while ((count = zis.read(buffer)) != -1) 
            {
                fout.write(buffer, 0, count);             
            }

            fout.close();               
            zis.closeEntry();
        }

        zis.close();
    } 
    catch(IOException e)
    {
        e.printStackTrace();
        return false;
    }

    return true;
}

Исключение при просмотре Logcat


person Thunder Dragon    schedule 23.06.2014    source источник
comment
mkdirs() возвращает true в случае успеха или false в случае неудачи. Проверьте это значение и попытайтесь понять, почему метод не удался.   -  person AlexR    schedule 23.06.2014
comment
›спасибо, но в родительском цикле сначала он устанавливает имя файла xml в переменную имени файла. Затем он пропускает часть if и сразу переходит к FileOutputStream fout = new FileOutputStream(path.substring(0,path.length()-4)+/+filename); строку и выдает исключение.   -  person Thunder Dragon    schedule 23.06.2014
comment
Это означает, что ze не является каталогом.   -  person AlexR    schedule 23.06.2014
comment
Да. Сначала он получает имя файла, после этого имя каталога.   -  person Thunder Dragon    schedule 23.06.2014
comment
Отлично. Итак, просто отлаживайте свой код и попытайтесь понять, в чем проблема.   -  person AlexR    schedule 23.06.2014
comment
Спасибо за вашу поддержку. Я постараюсь исправить это.   -  person Thunder Dragon    schedule 23.06.2014


Ответы (1)


Этот метод отлично работает. Это была проблема с разрешением при создании zip-файлов на платформе Linux. Но функция начинает работать правильно, когда я изменил разрешение файла.

person Thunder Dragon    schedule 24.06.2014