如何压缩文件夹中包含的多个文件而不压缩android中的整个文件夹?

时间:2012-09-24 05:43:40

标签: java android zip

这是我的要求我有一个文件夹(例如:主文件夹),其中包含三个项目

  

一个文件夹和两个文本文件   我想只压缩Main文件夹中包含的这三个项目。现在我正在使用Main文件夹压缩内容,结果压缩文件夹名称是“temp.zip”,当我解压缩时,我得到的是“Main文件夹” ”。但我的要求是当我解压缩“temp.zip”时,它应该只显示Main文件夹的内容。   任何人都能帮我实现这个目标吗?   谢谢。

编辑:这是我用来压缩文件的代码  这是我压缩文件的代码

public void zipFolder(String srcFolder, String destZipFile)
        throws Exception {
    ZipOutputStream zip = null;
    FileOutputStream fileWriter = null;
    fileWriter = new FileOutputStream(destZipFile);
    zip = new ZipOutputStream(fileWriter);
    addFolderToZip("", srcFolder, zip);
    zip.flush();
    zip.close();

}

  private void addFolderToZip(String path, String srcFolder,
        ZipOutputStream zip) throws Exception {
    File folder = new File(srcFolder);
    for (String fileName : folder.list()) {
        if (path.equals("")) {
            addFileToZip(folder.getName(), srcFolder + "/" + fileName, zip);
        } else {
            addFileToZip(path + "/" + folder.getName(), srcFolder + "/"
                    + fileName, zip);

        }
    }
}                                                                  

private void addFileToZip(String path,String srcFile,ZipOutputStream zip)             抛出异常{

    File folder = new File(srcFile);
    if (folder.isDirectory()) {
        addFolderToZip(path, srcFile, zip);
    } else {
        byte[] buf = new byte[1024];
        int len;
        FileInputStream in = new FileInputStream(srcFile);
        zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
        while ((len = in.read(buf)) > 0) {
            zip.write(buf, 0, len);
        }

}
}

我用这些参数调用zipfolder方法:      zipFolder(srcfolder,destipath +“/”+“temp.zip”);

5 个答案:

答案 0 :(得分:0)

您可以使用TrueZip库。

这是一个 example

答案 1 :(得分:0)

将一组单独的文件压缩到Android中的单个zip应该非常简单。这里有一个很好的教程可以帮助你入门:

http://www.jondev.net/articles/Zipping_Files_with_Android_%28Programmatically%29

答案 2 :(得分:0)

我刚从此post

复制

从哑光答案中提到我成功使用了这个库。

  

你可以尝试Zip4j,一个纯java库来处理zip文件。它支持   加密/解密PKWare和AES加密方法。

     

http://www.lingala.net/zip4j/

     

主要特点:

     
      
  • 创建,添加,提取,更新,从Zip文件中删除文件
  •   
  • 读取/写入受密码保护的Zip文件
  •   
  • 支持AES 128/256加密
  •   
  • 支持标准邮​​编加密
  •   
  • 支持Zip64格式
  •   
  • 支持存储(无压缩)和Deflate压缩方法
  •   
  • 从Split Zip文件创建或提取文件(例如:z01,z02,... zip)
  •   
  • 支持Unicode文件名
  •   
  • Progress Monitor
  •   
     

许可:

     
      
  • Zip4j在Apache License,Version 2.0
  • 下发布   

答案 3 :(得分:0)

try {
    String zipFile = "/locations/data.zip";
    String srcFolder = "/locations";

    File folder = new File(srcFolder);
    String[] sourceFiles = folder.list();

    //create byte buffer
    byte[] buffer = new byte[1024];

    /*
     * To create a zip file, use
     *
     * ZipOutputStream(OutputStream out) constructor of ZipOutputStream
     * class.
     */
    //create object of FileOutputStream
    FileOutputStream fout = new FileOutputStream(zipFile);

    //create object of ZipOutputStream from FileOutputStream
    ZipOutputStream zout = new ZipOutputStream(fout);

    for (int i = 0; i < sourceFiles.length; i++) {
        if (sourceFiles[i].equalsIgnoreCase("file.csv") || sourceFiles[i].equalsIgnoreCase("file1.csv")) {
            sourceFiles[i] = srcFolder + fs + sourceFiles[i];
            System.out.println("Adding " + sourceFiles[i]);
            //create object of FileInputStream for source file
            FileInputStream fin = new FileInputStream(sourceFiles[i]);

            /*
             * To begin writing ZipEntry in the zip file, use
             *
             * void putNextEntry(ZipEntry entry) method of
             * ZipOutputStream class.
             *
             * This method begins writing a new Zip entry to the zip
             * file and positions the stream to the start of the entry
             * data.
             */

            zout.putNextEntry(new ZipEntry(sourceFiles[i].substring(sourceFiles[i].lastIndexOf("/") + 1)));

            /*
             * After creating entry in the zip file, actually write the
             * file.
             */
            int length;

            while ((length = fin.read(buffer)) > 0) {
                zout.write(buffer, 0, length);
            }

            /*
             * After writing the file to ZipOutputStream, use
             *
             * void closeEntry() method of ZipOutputStream class to
             * close the current entry and position the stream to write
             * the next entry.
             */

            zout.closeEntry();

            //close the InputStream
            fin.close();

        }
    }

    //close the ZipOutputStream
    zout.close();

    System.out.println("Zip file has been created!");

} catch (IOException ioe) {
    System.out.println("IOException :" + ioe);
}

答案 4 :(得分:-1)

在Windows中,您可以通过以下步骤实现此目的,

1.打开主文件夹,选择要添加到zip文件中的文件 2.右击 - &gt;加入archieve 3.选择archieve格式为zip并单击“确定”