文件夹压缩zip

配置:

1.将php_zip.dll放入\xampp\php\ext 中;

2.php.ini文件中  添加 extension=php_zip.dll,zlib.output_compression=On

//3.加入:extension=fileinfo.so

4.开启extension=php_fileinfo.dll

$zipres = $this -> zip($dstdir, $dstdir.'.zip');
        if(!zipres){
            $rt['status'] = 4;
            $rt['info'] = "打包失败";
            $this->ajaxReturn($rt,'JSON');
        }
        $this -> delDirAndFile($dstdir,true);

        $zipname =  $dstdir.'.zip';
        if(!file_exists($zipname)){
            $rt['status'] = 5;
            $rt['info'] = "压缩包不存在";
            $this->ajaxReturn($rt,'JSON');
        }
        
        $rt['status'] = 0;
        $rt['info'] = "打包成功";
        $rt['zipname'] = $zipname;
        $this->ajaxReturn($rt,'JSON');



    function zip($fromName, $toName){
        if(!file_exists($fromName)){
            return FALSE;
        }
        $zipArc = new \ZipArchive; 
        if(!$zipArc->open($toName, \ZipArchive::CREATE)){
            return FALSE;
        }
        $res = is_dir($fromName) ? $zipArc->addGlob("{$fromName}/*") : $zipArc->addFile($fromName);
        if(!$res){
            $zipArc->close();
            return FALSE;
        }
        return $zipArc->close();
    }



    function delDirAndFile($path, $delDir) {
        if (is_array($path)) {
            foreach ($path as $subPath)
                delDirAndFile($subPath, $delDir);
        }
        if (is_dir($path)) {
            $handle = opendir($path);
            if ($handle) {
                while (false !== ( $item = readdir($handle) )) {
                    if ($item != "." && $item != "..")
                        is_dir("$path/$item") ? delDirAndFile("$path/$item", $delDir) : unlink("$path/$item");
                }
                closedir($handle);
                if ($delDir)
                    return rmdir($path);
            }
        } else {
            if (file_exists($path)) {
                return unlink($path);
            } else {
                return FALSE;
            }
        }
        clearstatcache();
    }

 

### Java 实现文件夹压缩Zip 格式的示例 以下是使用 `java.util.zip` 包中的类来实现将整个文件夹压缩ZIP 文件的代码示例: ```java import java.io.*; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class FolderToZip { public static void compressFolder(String srcDir, String destFile) throws IOException { Path outputFilePath = Paths.get(destFile); try (ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(Files.newOutputStream(outputFilePath)))) { Files.walk(Paths.get(srcDir)) .filter(path -> !Files.isDirectory(path)) // 过滤掉目录,只处理文件 .forEach(path -> { ZipEntry zipEntry = new ZipEntry(getRelativePath(srcDir, path.toString())); try { zos.putNextEntry(zipEntry); // 添加条目到ZIP流中 Files.copy(path, zos); // 将文件写入ZIP流 zos.closeEntry(); // 关闭当前条目 } catch (IOException e) { System.err.println("Error writing file to zip archive: " + path); e.printStackTrace(); } }); } } private static String getRelativePath(String rootDir, String absolutePath) { return absolutePath.substring(rootDir.length() + 1).replace("\\", "/"); // 转换路径分隔符并获取相对路径 } public static void main(String[] args) { String sourceDirectory = "C:/example/source"; // 替换为目标文件夹路径 String destinationZipFile = "C:/example/output.zip"; // 替换为输出ZIP文件路径 try { compressFolder(sourceDirectory, destinationZipFile); System.out.println("Compression completed successfully."); } catch (IOException e) { System.err.println("An error occurred during compression:"); e.printStackTrace(); } } } ``` #### 说明 上述代码实现了以下功能: - 使用 `java.util.zip.ZipOutputStream` 类创建一个新的 ZIP 输出流[^2]。 - 遍历指定源文件夹下的所有子文件和子文件夹,并将其逐个添加至 ZIP 归档中。 - 对于每个文件,计算其相对于根文件夹的路径作为 ZIP 条目的名称。 - 利用 `getRelativePath()` 方法确保生成的 ZIP 文件保留原始文件结构。 此方法适用于任何大小合理的文件夹及其内部内容。如果目标文件夹非常大,则可能需要优化内存管理策略以避免潜在性能瓶颈。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值