1

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

一个文件夹和两个文本文件我只想压缩主文件夹中包含的这三个项目。现在我正在用主文件夹压缩内容,压缩后的文件夹名称是“temp.zip”,当我解压缩这个时,我我正在获取“主文件夹”。但我的要求是当我解压缩“temp.zip”时,它应该只显示主文件夹的内容。任何人都可以帮助我实现这一目标吗?谢谢你。

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

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");

4

4 回答 4

0

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

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

于 2012-09-24T07:28:35.587 回答
0

我刚刚从这个帖子复制

从马特答案中引用我成功地使用了这个库。

您可以尝试 Zip4j,这是一个处理 zip 文件的纯 Java 库。它支持PKWare和AES加密方法的加密/解密。

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

主要特征:

  • 从 Zip 文件中创建、添加、提取、更新、删除文件
  • 读/写受密码保护的 Zip 文件
  • 支持 AES 128/256 加密
  • 支持标准 Zip 加密
  • 支持 Zip64 格式
  • 支持 Store (No Compression) 和 Deflate 压缩方式
  • 从拆分 Zip 文件中创建或提取文件(例如:z01、z02、...zip)
  • 支持 Unicode 文件名
  • 进度监视器

执照:

  • Zip4j 在 Apache 许可证下发布,版本 2.0
于 2012-09-24T09:33:56.860 回答
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);
}
于 2013-02-06T07:38:08.447 回答
-2

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

1.打开主文件夹并选择要添加到 zip 文件中的文件 2.右键单击 -> 添加到存档 3.选择存档格式为 zip 并单击“确定”

于 2012-09-24T06:53:20.993 回答