700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 把文件夹打包为ZIP格式的文件 不压缩!!

把文件夹打包为ZIP格式的文件 不压缩!!

时间:2019-06-17 18:35:28

相关推荐

把文件夹打包为ZIP格式的文件 不压缩!!

不压缩生成zip文件又称《文档归类存储》,经过测试效率对比压缩方式提高50%左右!!

废话不多说,直接上代码:

private static final int BUFFER_SIZE = 2 * 1024;/*** 指定压缩成zip* @param srcFiles 需要压缩的文件列表* @param out 压缩文件输出流* @throws RuntimeException 压缩失败会抛出运行时异常*/public static void toZip(List<File> srcFiles , OutputStream out)throws RuntimeException {long start = System.currentTimeMillis();ZipOutputStream zos = null ;try {zos = new ZipOutputStream(out);for (File srcFile : srcFiles) {byte[] buf = new byte[BUFFER_SIZE];zos.putNextEntry(new ZipEntry(srcFile.getName()));int len;FileInputStream in = new FileInputStream(srcFile);while ((len = in.read(buf)) != -1){zos.write(buf, 0, len);}zos.closeEntry();in.close();}long end = System.currentTimeMillis();System.out.println("压缩完成,耗时:" + (end - start) +" ms");} catch (Exception e) {throw new RuntimeException("zip error from ZipUtils",e);}finally{if(zos != null){try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}/**** 归类存储模式:把文件夹打包成Zip格式的文件,不进行压缩* @param srcDir 压缩文件夹路径* @param out 压缩文件输出流* @param KeepDirStructure 是否保留原来的目录结构,*true:保留目录结构;*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)* @throws RuntimeException 压缩失败会抛出运行时异常*/public static void toZip(String[] srcDir, OutputStream out,boolean KeepDirStructure) throws RuntimeException, Exception {long start = System.currentTimeMillis();ZipOutputStream zos = null;try {zos = new ZipOutputStream(out);List<File> sourceFileList = new ArrayList<File>();for (String dir : srcDir) {File sourceFile = new File(dir);sourceFileList.add(sourceFile);}compress(sourceFileList, zos, KeepDirStructure);long end = System.currentTimeMillis();System.out.println("压缩完成,耗时:" + (end - start) + " ms");} catch (Exception e) {throw new RuntimeException("zip error from ZipUtils", e);} finally {if (zos != null) {try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}/**** 方法名:getFileBytes<br>* 描述:获取文件的bytes<br>* 创建时间:-12-14 下午2:23:33<br>* @param file* @return* @throws FileNotFoundException* @throws IOException<br>*/public static byte[] getFileBytes(File file) throws FileNotFoundException,IOException {byte[] buffer;FileInputStream fis = new FileInputStream(file);ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);byte[] b = new byte[1000];int n;while ((n = fis.read(b)) != -1) {bos.write(b, 0, n);}fis.close();bos.close();buffer = bos.toByteArray();return buffer;}/*** 递归压缩方法* @param sourceFile 源文件* @param zos zip输出流* @param name 压缩后的名称* @param KeepDirStructure 是否保留原来的目录结构,*true:保留目录结构;*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)* @throws Exception*/private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure) throws Exception {byte[] buf = new byte[BUFFER_SIZE];if (sourceFile.isFile()) {//此处是重点,不压缩设置ZipEntry zipEntry = new ZipEntry(name);zipEntry.setMethod(ZipEntry.STORED);zipEntry.setCompressedSize(sourceFile.length());zipEntry.setSize(sourceFile.length());CRC32 crc = new CRC32();crc.update(getFileBytes(sourceFile));zipEntry.setCrc(crc.getValue());zos.putNextEntry(zipEntry);int len;FileInputStream in = new FileInputStream(sourceFile);while ((len = in.read(buf)) != -1) {zos.write(buf, 0, len);}// Complete the entryzos.closeEntry();in.close();} else {File[] listFiles = sourceFile.listFiles();if (listFiles == null || listFiles.length == 0) {if (KeepDirStructure) {ZipEntry zipEntry = new ZipEntry(name + "/");zipEntry.setMethod(ZipEntry.STORED);zipEntry.setCompressedSize(sourceFile.length());zipEntry.setSize(sourceFile.length());CRC32 crc = new CRC32();crc.update(getFileBytes(sourceFile));zipEntry.setCrc(crc.getValue());zos.putNextEntry(zipEntry);zos.closeEntry();}} else {for (File file : listFiles) {if (KeepDirStructure) {compress(file, zos, name + "/" + file.getName(),KeepDirStructure);} else {compress(file, zos, file.getName(), KeepDirStructure);}}}}}private static void compress(List<File> sourceFileList, ZipOutputStream zos, boolean KeepDirStructure) throws Exception {byte[] buf = new byte[BUFFER_SIZE];for (File sourceFile : sourceFileList) {String name = sourceFile.getName();if (sourceFile.isFile()) {zos.putNextEntry(new ZipEntry(name));int len;FileInputStream in = new FileInputStream(sourceFile);while ((len = in.read(buf)) != -1) {zos.write(buf, 0, len);}zos.closeEntry();in.close();} else {File[] listFiles = sourceFile.listFiles();if (listFiles == null || listFiles.length == 0) {if (KeepDirStructure) {zos.putNextEntry(new ZipEntry(name + "/"));zos.closeEntry();}} else {for (File file : listFiles) {if (KeepDirStructure) {compress(file, zos, name + "/" + file.getName(),KeepDirStructure);} else {compress(file, zos, file.getName(),KeepDirStructure);}}}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。