При распаковке ZipEntry возвращает имя_фолдера / имя файла вместо только имя_файла /, и это вызывает исключение «Файл не найден» - PullRequest
0 голосов
/ 08 апреля 2019

Я создаю zip из серверной части, используя PHP. и я хочу разархивировать на стороне Android.

Структура моей папки Zip включает

  • Папка 1
    • файл
    • файл
  • Папка 2
    • файл
    • файл
  • Файл

Для создания zip я использую следующий код

foreach ($files as $name => $file)
                    {
                        // echo $file.'  --   ';
                        if (!$file->isDir())
                        {
                            $filePath = $file->getRealPath();
                            $relativePath = substr($filePath, strlen($rootPath) + 1);
                            //echo dirname($file);
                            $zip->addFile($filePath, $relativePath);

                        }
                    }

В Android я использую следующий код, чтобы распаковать

        InputStream is;
        ZipInputStream zis;
        try {
            String filename;
            is = new FileInputStream(zipFile);
            zis = new ZipInputStream(new BufferedInputStream(is));
            ZipEntry ze;
            byte[] buffer = new byte[8192];
            int count;
            while ((ze = zis.getNextEntry()) != null) {
                filename = ze.getName();
                // it will show 
                // it will generate an Exception...
                if (ze.isDirectory()) {
                    File fmd = new File(location + filename);
                    fmd.mkdirs();
                    continue;
                }
                FileOutputStream fout = new FileOutputStream(location + filename);
                while ((count = zis.read(buffer)) != -1) {
                    fout.write(buffer, 0, count);
                }
                fout.close();
                zis.closeEntry();
            }
            zis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

Но это не дает мне должного результата, который мне нужен.

Я ожидаю выхода на

ze.getName () is FolderName /

но я фактический вывод

Имя папки / имя файла

, поэтому он не рассматривает косую черту как каталог и выдает исключение File Not Found.

...