压缩方法生成无限循环

时间:2018-03-30 21:12:07

标签: android zip zipfile

我正在尝试将文件夹的所有子文件夹放在zip文件中,所以我这样做:

public static void zipFolder(String inputFolderPath, String outZipPath) {
        try {
            FileOutputStream fos = new FileOutputStream(outZipPath);
            ZipOutputStream zos = new ZipOutputStream(fos);
            File srcFile = new File(inputFolderPath);
            File[] files = srcFile.listFiles();
            Log.d("", "Zip directory: " + srcFile.getName());
            for (int i = 0; i < files.length; i++) {
                Log.d("", "Adding file: " + files[i].getName());
                byte[] buffer = new byte[1024];
                FileInputStream fis = new FileInputStream(files[i]);
                zos.putNextEntry(new ZipEntry(files[i].getName()));
                int length;
                while ((length = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, length);
                }
                zos.closeEntry();
                fis.close();
            }
            zos.close();
        } catch (IOException ioe) {
            Log.e("", ioe.getMessage());
        }

我在这个question

中看到了这段代码

但是,代码进入循环,因为lenght总是1024

循环发生在第二个文件中。我打印了fileList

enter image description here

在这种情况下,我尝试创建“aaaaaaa”文件,其他人来自另一次尝试,我不明白他们为什么显示,因为该目录没有任何zip文件。

PS:我正在尝试压缩的目录有两个子文件夹。我不知道这是否会影响。

1 个答案:

答案 0 :(得分:0)

我解决了问题:D

在我看来,该方法不考虑子文件夹,只考虑文件。在我的情况下,我在files目录中有两个文件夹及其中的内容。

所以,现在我为每个子文件夹调用方法,outZipPath应该是一个公共目录:

Controller.zipFolder(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS).getAbsolutePath(), Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/content_" +
                    Util.formatoData.format(data).replace("/", ".") + ".zip");