精华内容
下载资源
问答
  • 在pb中如何将一个文件夹一个文件压缩到一个zip压缩文件中,不要rar的,求高手
  • PHP压缩一个文件夹里面所有的文件,多文件混合压缩。 本函数可以接受多个源文件(或文件夹)同时压缩。 function createZip($from, $to)。 PHP文件夹打包,以供下载


    PHP压缩一个文件夹里面所有的文件,多文件混合压缩

    p.s. 文件打包,文件夹打包,文件夹加文件压缩,zip函数      


    前言...

    找了好久,都没找到适合自己的函数,遂自建一个。

    本函数可以接受多个源文件(或文件夹)同时压缩,例如使用数组传值:

    $zip_result = createZip( array('A.php', 'B.txt', 'logo.png', '/var/www/assets/css/'),      'result.zip' );

    $zip_result = createZip( ‘/path-to-source-folder/’,  'result.zip' );

    $zip_result = createZip( 'index.html',      'result.zip' );


    注意:

    * 1.需要两个自建函数配合:createZip()  +   recursive_get_files_by_path_of_folder() 
    * 2.主函数一个输出的结果$return['data']['zipFile']['url']需要自己去补充,现在为空。(可选)


    代码:

    <?php
    
    
    
    /**
     * 
     * createZip - 创建压缩包,for文件夹/文件
     * 
     * @param type string-or-array $from  
     *        => 字符串 '/path/to/source/file/or/folder/'
     *        => 或者 包含字符串的数组  array('fileA','FolderA','fileB')
     * @param type string $to 
     *        => 字符串 '/path/to/output.zip'
     * @return array
     *        => array(
     *             'success' => false, 
     *             'message' => '失败原因', 
     *             'data' => array(
     *                 'zipFile' => array(zip文件的信息)
     *             ) 
     *           )
     * @author Rudon[285744011@qq.com]
     * 
     */
    function createZip($from, $to) {
        /* Init */
        $return = array(
            'success' => false,
            'message' => '',
            'data' => array(
                'zipFile' => array(
                    'name' => '',
                    'path_relative' => '',
                    'path_absolute' => '',
                    'url' => '', // 自己添加吧
                    'size' => '',
                    'exists_before' => false
                )
            )
        );
    
        /* Check zip class */
        if (!class_exists('ZipArchive')) {
            $return['message'] = 'Missing ZipArchive module in server.';
            return $return;
        }
    
        /* Check right of write for target zip file */
        $zip = new ZipArchive();
        if (!is_dir(dirname($to))) {
            mkdir(dirname($to), 0755, TRUE);
        }
        if (is_file($to)) {
            $return['data']['zipFile']['exists_before'] = true;
            if ($zip->open($to, ZIPARCHIVE::OVERWRITE) !== TRUE) {
                $return['message'] = "Cannot overwrite: {$to}";
                return $return;
            }
        } else {
            if ($zip->open($to, ZIPARCHIVE::CREATE) !== TRUE) {
                $return['message'] = "Could not create archive: {$to}";
                return $return;
            }
        }
    
    
        /* Check path of source files or folder */
        $source_path_including_dir = array();
        $prefix_relative_path_for_source = '';
        if (is_array($from)) {
            foreach ($from as $path) {
                if (file_exists($path)) {
                    if ($prefix_relative_path_for_source == '') {
                        $prefix_relative_path_for_source = (is_dir($path)) ? realpath($path) : realpath(dirname($path));
                    }
                    $source_path_including_dir[] = $path;
                } else {
                    $return['message'] = 'No such file or folder: ' . $path;
                    return $return;
                }
            }
        } elseif (file_exists($from)) {
            $prefix_relative_path_for_source = (is_dir($from)) ? realpath($from) : realpath(dirname($from));
            $source_path_including_dir[] = $from;
        } else {
            $return['message'] = 'No such file or folder: ' . $from;
            return $return;
        }
        $prefix_relative_path_for_source = rtrim($prefix_relative_path_for_source, '/') . '/';
    
    
        /* Get final list of files, no folder */
        $final_list_of_files = array();
        foreach ($source_path_including_dir as $path) {
            if (is_file($path)) {
                /* File */
                $final_list_of_files[] = $path;
            } else {
                /* Folder */
                $list_of_files = recursive_get_files_by_path_of_folder($path);
                foreach ($list_of_files as $one) {
                    $final_list_of_files[] = $one;
                }
            }
        }
        if (!count($final_list_of_files)) {
            $return['message'] = 'No valid file or folder used to zip';
            return $return;
        }
    
    
        /* Begin to add to zip file */
        foreach ($final_list_of_files as $one_file) {
            $zip->addFile($one_file, str_replace($prefix_relative_path_for_source, '', $one_file));
        }
        $zip->close();
    
        /* Return */
        $return['success'] = true;
        $return['data']['zipFile']['name'] = pathinfo($to, PATHINFO_BASENAME);
        $return['data']['zipFile']['path_relative'] = $to;
        $return['data']['zipFile']['path_absolute'] = realpath($to);
        $return['data']['zipFile']['size'] = number_format(abs(filesize($to) / 1024), 2) . ' KB';
        return $return;
    }
    
    
    /**
     * 获取文件夹下的文件列表,遍历模式
     * 
     * @param type $dir
     * @param type $is_tree
     * @return string
     */
    function recursive_get_files_by_path_of_folder($dir, $is_tree = false) {
        $files = array();
        $dir = preg_replace('/[\/]{1}$/i', '', $dir);
        if (is_dir($dir)) {
            if ($handle = opendir($dir)) {
                while (($file = readdir($handle)) !== false) {
                    if ($file != "." && $file != "..") {
                        if (is_dir($dir . "/" . $file)) {
                            $sub_list = recursive_get_files_by_path_of_folder($dir . "/" . $file, $is_tree);
                            if ($is_tree) {
                                $files[$file] = $sub_list;
                            } else {
                                foreach ($sub_list as $one_sub_file) {
                                    $files[] = $one_sub_file;
                                }
                            }
                        } else {
                            $files[] = $dir . "/" . $file;
                        }
                    }
                }
                closedir($handle);
                return $files;
            }
        } else {
            $files[] = $dir;
            return $files;
        }
    }
    
    
    
    /************************************************
     * 参数$from的可选形式:
     * $from = array('A.php', 'B.php', 'C.php', './folderName/')
     * $from = './folderName/';
     * $from = 'xxx.txt';
     */
    
    
    $from = './folderName/';
    $to = './res/tmp.zip';
    $zip_result = createZip($from, $to);
    print_r($zip_result);
    
    


    结果预览:

    <?php
    Array
    (
    	[success] => true
    	[message] => ''
    	[data] => Array
    		(
    			[zipFile] => Array
    				(
    					[name] => tmp.zip
    					[path_relative] => ./res/tmp.zip
    					[path_absolute] => /var/www/Project/res/tmp.zip
    					[url] => ''
    					[size] => 3.18 KB
    					[exists_before] => false
    				)
    		)
    )







    相关标签:

    PHP文件夹打包,以供下载。
    PHP自带ZIP压缩、解压缩类ZipArchiv介绍及使用。
    php zip文件下载。
    php将文件夹打包成zip文件。
    php将文件夹打包成zip文件的简单实现方法。
    php如何压缩一个文件夹里面所有的文件到zip文件里面。
    使用PHP自带zlib函数 几行代码实现PHP文件打包下载zip。



    展开全文
  • 用在把一个文件夹下的所有文件都放到一个文件夹下,删除多层文件夹

            java 用在把一个文件夹下的所有文件都放到一个文件夹下,删除多层文件夹

         该小程序是一个完整的功能,可以直接使用

    package com.yangjf.service.impl;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    import org.apache.log4j.Logger;
    
    
    public class FolderFileToPack {
    
    	public static List<String> listFile = new ArrayList<String>();
    	
    	public static List<String> listFileName = new ArrayList<String>();
    
    	private  final Logger logger = Logger.getLogger(getClass());
    	
    	/**
    	 * 将存放在sourceFilePath目录下的源文件夹下的所有文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
    	 * (用在把一个文件夹下的所有文件都放到一个文件夹下,删除多层文件夹)
    	 * @param sourceFilePath
    	 *            :待压缩的文件路径
    	 * @param zipFilePath
    	 *            :压缩后存放路径
    	 * @param fileName
    	 *            :压缩后文件的名称
    	 * @return
    	 */
    	public static boolean fileToZip(String sourceFilePath,String zipFilePath, String fileName) {
    		boolean flag = false;
    		FileInputStream fis = null;
    		BufferedInputStream bis = null;
    		FileOutputStream fos = null;
    		ZipOutputStream zos = null;
    		getFile(sourceFilePath);
    		try {
    			File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
    			if (zipFile.exists()) {
    				System.out.println(zipFilePath + "目录下存在名字为:" + fileName
    						+ ".zip" + "的打包文件.");
    			} else { 
    				fos = new FileOutputStream(zipFile);
    				zos = new ZipOutputStream(new BufferedOutputStream(fos));
    				byte[] bufs = new byte[1024 * 1024];
    				for (int i = 0; i < listFile.size(); i++) {
    					try {
    						//把文件路径按“\”划分,获取最后一个也就是文件名
    						String[] listFileSome = listFile.get(i).split("\\\\");
    						int listLength = listFileSome.length;
    						String oneFileName  = listFileSome[listLength-1];
    						//查重文件名,重复加数字
    						oneFileName = checkFileName(oneFileName,0);
    						//创建ZIP实体,并添加进压缩包
    						ZipEntry zipEntry = new ZipEntry(oneFileName);
    						zos.putNextEntry(zipEntry);
    						// 读取待压缩的文件并写进压缩包里
    						fis = new FileInputStream(listFile.get(i));
    						bis = new BufferedInputStream(fis, 1024 * 1024);
    						int read = 0;
    						while ((read = bis.read(bufs, 0, 1024 * 1024)) != -1) {
    							zos.write(bufs, 0, read);
    						}
    					} catch (Exception e) {
    						// TODO: handle exception
    						e.printStackTrace();
    						//logger.error("");
    					}
    					
    				}
    				flag = true;
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		} catch (IOException e) {
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		} finally {
    			// 关闭流
    			try {
    				if (null != bis)
    					bis.close();
    				if (null != zos)
    					zos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    				throw new RuntimeException(e);
    			}
    		}
    		return flag;
    	}
    
    	//查重文件名,最后添加进去
    	public static String checkFileName(String oneFileName,int i){
    		
    		if(listFileName.contains(oneFileName)){
    			String[] partName = oneFileName.split("\\.");
    			oneFileName = partName[0]+ ++i+"."+partName[1];
    			checkFileName(oneFileName,i);
    		}else{
    			listFileName.add(oneFileName);
    		}
    		return oneFileName;
    		
    	}
    	
    	public static void getFile(String path) {
    		File file = new File(path);
    		File[] tempList = file.listFiles();
    		for (File f : tempList) {
    			if (f.isFile()) {
    				listFile.add(f.getPath());
    				System.out.println(f.getPath());
    				continue;
    			}
    			if (f.isDirectory()) {
    				getFile(f.getPath());
    			}
    		}
    
    	}
    
    	public static void main(String[] args) {
    		String sourceFilePath = "F:\\uploadT";
    		String zipFilePath = "F:\\log";
    		String fileName = "manyFileType02";
    		fileToZip(sourceFilePath,zipFilePath, fileName);
    
    	}
    
    }
    

    展开全文
  • 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放zipFilePath路径下

            java 把指定文件夹下的所有文件目录和文件都压缩到指定文件夹下

         这是一个完整的小程序,可以直接使用

    package com.yangjf.service.impl;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    import org.apache.log4j.Logger;
    
    public class FileToPack {
    
    	private  final Logger logger = Logger.getLogger(getClass());
    
    	public static List<String> listFile = new ArrayList<String>();
    	
    
    	/**
    	 * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下
    	 * (把指定文件夹下的所有文件目录和文件都压缩到指定文件夹下)
    	 * @param sourceFilePath
    	 *            :待压缩的文件路径
    	 * @param zipFilePath
    	 *            :压缩后存放路径
    	 * @param fileName
    	 *            :压缩后文件的名称
    	 * @return
    	 */
    	public static  boolean fileToZip(String sourceFilePath,String zipFilePath, String fileName) {
    		boolean flag = false;
    		FileInputStream fis = null;
    		BufferedInputStream bis = null;
    		FileOutputStream fos = null;
    		ZipOutputStream zos = null;
    		getFile(sourceFilePath);
    		try {
    			File zipFile = new File(zipFilePath + "/" + fileName + ".zip");
    			if (zipFile.exists()) {
    				System.out.println(zipFilePath + "目录下存在名字为:" + fileName
    						+ ".zip" + "的打包文件.");
    			} else { 
    				if(!zipFile.exists()){
    					zipFile.getParentFile().mkdirs();
    				}
    				fos = new FileOutputStream(zipFile);
    				zos = new ZipOutputStream(new BufferedOutputStream(fos));
    				byte[] bufs = new byte[1024 * 1024];
    				for (int i = 0; i < listFile.size(); i++) {
    					try {
    						//创建ZIP实体,并添加进压缩包
    						ZipEntry zipEntry = new ZipEntry(listFile.get(i));
    						zos.putNextEntry(zipEntry);
    						// 读取待压缩的文件并写进压缩包里
    						fis = new FileInputStream(listFile.get(i));
    						bis = new BufferedInputStream(fis, 1024 * 1024);
    						int read = 0;
    						while ((read = bis.read(bufs, 0, 1024 * 1024)) != -1) {
    							zos.write(bufs, 0, read);
    						}
    					} catch (Exception e) {
    						//logger.error("文件读取处理有误");
    						e.printStackTrace();
    					}
    					
    				}
    				flag = true;
    			}
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		} catch (IOException e) {
    			e.printStackTrace();
    			throw new RuntimeException(e);
    		} finally {
    			// 关闭流
    			try {
    				if (null != bis)
    					bis.close();
    				if (null != zos)
    					zos.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    				throw new RuntimeException(e);
    			}
    		}
    		return flag;
    	}
    
    	public static void getFile(String path) {
    		File file = new File(path);
    		File[] tempList = file.listFiles();
    		for (File f : tempList) {
    			if (f.isFile()) {
    				listFile.add(f.getPath());
    				System.out.println(f.getPath());
    				continue;
    			}
    			if (f.isDirectory()) {
    				getFile(f.getPath());
    			}
    		}
    
    	}
    
    	public static void main(String[] args) {
    		String sourceFilePath = "F:\\uploadT";
    		String zipFilePath = "F:\\log";
    		String fileName = "manyFileType01";
    		fileToZip(sourceFilePath,zipFilePath, fileName);
    
    	}
    
    }
    


    展开全文
  • 如果想它们解压缩到一个文件夹(举例名为unzipped),命令为: unzip '*.zip' -d unzipped *可以根据共同前后缀灵活运用。   但是这样我还是不满意。 在同一个文件夹后,解压做的1.zip, 2....

    其实linux有几个命令都是用于解压缩的。这里就举例unzip

    例如在一个文件夹里你又许多.zip 文件,如1.zip, 2.zip, 3.zip ......。如果想把它们解压缩到同一个文件夹(举例名为unzipped),命令为:

    unzip '*.zip' -d unzipped

    *可以根据共同前后缀灵活运用。

     

    但是这样我还是不满意。 在同一个文件夹后,解压做的1.zip, 2.zip等分别又给我建立了不同的子文件夹,比如说文件夹1,2,3. 如果能保证每个文件夹里的文件名字都不重合。那可以这样干,还以上面已经被命名为unzipped的文件夹举例,假设子文件夹都在unzipped里面,你可以选择合并后的名字,还叫unzipped或者其他的名字,这里就叫它unzipped2, 那你需要的命令就是下面的:

    find unzipped -depth \( -type f -exec mv -i {} unzipped2 \; \) -o \( -type d -empty -delete \)

    这样你就会建立一个叫unzipped2的文件夹。所有前面1.zip,2.zip里面的文件都被解压缩放进unzipped2里面了。

     

    注意,如果你不同的子文件里有包含相同名字的文件,你需要额外的处理。这里我没有这个需求,所以我就贴个参考链接上来,有问题再来参考吧:

    https://stackoverflow.com/questions/9314434/merging-sub-folders-together-linux

     

    展开全文
  • Java解压缩zip - 解压缩个文件文件夹

    万次阅读 多人点赞 2012-09-19 12:56:50
    Java解压缩zip - 多个文件(包括文件夹) 对多个文件文件夹...可以写数组的方式或者一个个写参数列表里面... ZipFiles(zip,"abc",new File("d:/English"),new File("d:/发放数据.xls")); 测试文件目录结构:
  • f.write(i, file) #这file是文件名,意思是直接把文件添加zip没有文件夹层级, f.write(i)这种写法,则会出现上面路径的层级 f.close() if __name__ == ' __main__ ' : addzip()  
  • tar -zcvf 自己想要压缩后的名字 要压缩文件的目录 这种方法是压缩为.tar.gz格式;其他的如下所述: http://www.2cto.com/os/201409/331715.html 常见的Linux压缩文件扩展名 *.Z compress压缩文件...
  • 1、打开要压缩文件夹,右键终端打开;2、输入压缩命令: tar -zcvf 3、输入输出的压缩文件名,例如:ll.tar.gz。然后在后面输入【*】星号就是所有文件...4、回车,那么即可压缩,当前目录有个压缩文件。 ...
  • 现实生活中,我们经常有这样的需求,如下图,有三个文件夹文件夹1内含有1.txt文件 文件夹2中内含有2.txt文件文件夹3中含有3.txt文件。我们有时候需要1.txt, 2.txt, 3.txt文件 复制个文件夹中。 下面...
  • 转载自: https://blog.csdn.net/huplion/article/details/81121655?utm_source=blogxgwz9
  • Java实现zip文件压缩(单个文件、文件夹以及文件和文件夹的组合压缩) package com.ljheee.ziptool.core; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io...
  • tar压缩和解压文件文件夹

    万次阅读 多人点赞 2018-08-21 16:08:06
    该命令表示压缩当前文件夹下的文件夹test,压缩后缀名为test.tar.gz 如果不需要压缩成gz,只需要后缀为tar格式的,那么输入如下命令: tar -cvf test.tar ./test/   2. 使用tar解压文件 tar -xzvf test.tar....
  • 参考:...   Talk is cheap,show me the code! ...同一文件夹下的多个文件夹打成一个zip包 import java.io.BufferedInputSt
  • java文件夹 文件批量压缩实现

    千次阅读 2018-11-12 10:52:35
    文件下载时,我想下载多个文件,思路当然是多个文件压缩到一个文件然后下载。如果用户选中文件夹下载呢,就是将文件夹内的所有文件按照原有文件结构压缩下载,如果用户勾选的既要下载文件,又要下载文件夹,这个...
  • /**  * 压缩文件成Gzip格式,Linux上可使用 ... * 压缩文件夹生成后缀名为".gz"的文件并下载  * @param folderPath,要压缩的文件夹的路径  * @param zipFilePath,压缩后文件的路径
  • # 怎么用c#写一个解压指定目录下所有的压缩文件,并且把压缩文件里面的内容放进指定文件夹呢?
  • /// 压缩个文件 /// /// <param name="destZipName"></param> /// <param name="srcFiles"></param> /// <param name="password"></param> /// <returns></returns> public static bool MultiZip(string ...
  • unity中压缩文件压缩文件夹的方法

    千次阅读 2018-09-05 19:32:21
    压缩包中的.dll文件(可以自己新建一个文件夹)导入Unity中,脚本实例中函数的三个参数,文件路径,输出路径,加载进度 引用这位大大的 https://blog.csdn.net/e295166319/article/details/53409048  博客 , ...
  • 使用Python将多个文件夹中的文件拷贝一个文件夹中 处理CityPersons数据集时,需要将多个文件夹中的图片拷贝至同一个文件夹中,因此编写了这个脚本。 运行环境 Python 3 源代码 # coding=utf-8 import os import ...
  • 例如: 我们以tomcat 为例,打包的时候我们要排除 tomcat/logs 目录,命令...如果要排除多目录,增加 --exclude 即可,如下命令排除logs和libs两目录及文件xiaoshan.txt: tar -zcvf tomcat.tar.gz --exclud...
  • 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩文件。 package com.chuangqi.tools; import java.io.File; import java.io.FileInputStream; import java.io....
  • 如何递归删除那些剩余的非log结尾的文件? 先列出确认一下: find hongchangfirst/data -type f ! -name "*.log" 然后真正的删除: find hongchangfirst/data -type f ! -name "*.log" -exec rm -f {} \;
  • 在此基础上又进行了扩展压缩文件文件夹,(我放了我的工具类FileUtil中),关于所有的工具类我放了github中,大家可以下载源码参考,版本也在不断更新中: github地址:...
  • bat 文件文件夹压缩

    2016-03-04 08:49:01
    对 aaa文件夹进行命令行压缩 (使用两 option: a 压缩速度 选 存档方式 b 压缩后 删除原来文件
  • Python压缩指定文件文件夹为zip

    千次阅读 2018-08-02 16:29:00
    Python压缩指定的文件文件夹为.zip 代码: def zipDir(dirpath,outFullName): """ 压缩指定文件夹 :param dirpath: 目标文件夹路径 :param outFullName: 压缩文件保存路径+xxxx.zip :return: 无 ...
  • 在Ubuntu下如何压缩一个文件夹

    万次阅读 2017-11-04 15:53:11
    sudo tar zcvf work.tar.gz work/ sudo tar jcvf work.tar.bz2 work/ sudo tar cvf work.tar work ...顺便也写一下解压缩吧 tar xzvf work.tar.gz tar xjvf work.tar.bz2 tar xvf work.tar
  • 在java中,如何创建一个文件夹,并放入代码生成的文件,然后压缩指定目录下?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 273,755
精华内容 109,502
关键字:

怎么把文件压缩到一个文件夹