当前位置: 首页 > 知识库问答 >
问题:

在android java中不包括主文件夹的Zip文件

龙学
2023-03-14

我使用这段代码,它完美地创建了zip文件,例如我有一个文件夹

SD卡/音乐,当我创建xxx时。它创建的zip文件。zip文件包括音乐/歌曲以及其中的一些子文件夹

但我想排除“音乐”中的主文件夹。压缩文件,并希望它直接开始,包括所有的歌曲和它的子文件夹,如何做到这一点

我使用这种方式,但在压缩时也使用主文件夹名称

public void unzipbutton(View v){ // button click

        try {
            FileOutputStream fos = new FileOutputStream("/mnt/sdcard/songs.zip");
            ZipOutputStream zos = new ZipOutputStream(fos);
            addDirToZipArchive(zos, new File("/mnt/sdcard/music"), null);
                zos.flush();
                fos.flush();
                zos.close();
                fos.close();
        } catch (Exception e) {

            e.printStackTrace();
        }

    }

     public static void addDirToZipArchive(ZipOutputStream zos, File fileToZip, String parrentDirectoryName) throws Exception {
        if (fileToZip == null || !fileToZip.exists()) {
            return;
        }

        String zipEntryName = fileToZip.getName();
        if (parrentDirectoryName!=null && !parrentDirectoryName.isEmpty()) {
            zipEntryName = parrentDirectoryName + "/" + fileToZip.getName();
        }

        if (fileToZip.isDirectory()) {
            System.out.println("+" + zipEntryName);
            for (File file : fileToZip.listFiles()) {
                addDirToZipArchive(zos, file, zipEntryName);
            }
        } else {
            System.out.println("   " + zipEntryName);
            byte[] buffer = new byte[1024];
            FileInputStream fis = new FileInputStream(fileToZip);
            zos.putNextEntry(new ZipEntry(zipEntryName));
            int length;
            while ((length = fis.read(buffer)) > 0) {
                zos.write(buffer, 0, length);
            }
            zos.closeEntry();
            fis.close();
        }
    }

有人帮忙吗谢谢

到目前为止,这一直很棘手,对我来说,现在没有办法工作:/

共有1个答案

微生宝
2023-03-14

在你的ZipEntry检查zipEntryName的完整路径时,它必须是这样的:“music/Pink/try.mp3”只要调用一个子字符串,以获得zipEntryName“Pink/try.mp3”,你的zip文件将是相同的“songs.zip”,但在其中你会找到文件夹“Pink”,而不是主文件夹“music/Pink…”

它对我有用。

 类似资料:
  • 每次我试图编译它来测试它不recongnise文件

  • 我正在寻找一种方法来获取zip文件中的文件列表。我创建了一个方法来获取目录中的文件列表,但我也在寻找一种方法来获取zip文件中的文件,而不是只显示zip文件。 以下是我的方法:

  • 在一个项目中,我有3个src文件夹(src1、src2、src3)。我已经能够通过将文件夹合并到单个src中来编译它。 当我使用helper插件编译它并定义三个src文件夹时,我可以看到78个java文件正在编译,但在最终的包中只包含4个类文件。 “-X”没有用。

  • 问题内容: 我正在尝试使用php创建一个zip文件(确实如此-从此页面获取-http://davidwalsh.name/create-zip- php ),但是zip文件中的所有文件夹名称都是文件本身。 可以将zip文件中的文件减去所有文件夹吗? 这是我的代码: 问题答案: 这里的问题是要传递相同的两个参数。 根据文档: bool ZipArchive :: addFile (字符串 $ fil

  • 问题内容: 我有一个包含文件夹结构的zip文件,例如 主文件夹/ subFolder1 / subFolder2 / subFolder3 / 文件3.1 文件3.2 我想使用Java 重命名文件夹,例如在该zip文件中。 有没有比提取整个zip文件并使用新的文件夹名称重新创建一个新的方法更简单的方法? 问题答案: Zip是一种存档格式,因此变异通常涉及重写文件。 zip的某些特殊功能也会受阻(z