文档章节

java压缩文件,在线下载文件并压缩

说多了都是泪呀
 说多了都是泪呀
发布于 2016/11/02 18:02
字数 750
阅读 103
收藏 0

压缩本地文件

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**
 * 创建用户:杨辽
 * 创建时间:2016-11-01 15:52:00
 * 描    述:
 */
public class ZipUtils {

    private static final Logger log = LoggerFactory.getLogger(ZipUtils.class);

    private ZipUtils() {
    }

    ;

    /**
     * 创建ZIP文件
     *
     * @param sourcePath 文件或文件夹路径
     * @param zipPath    生成的zip文件存在路径(包括文件名)
     */
    public static void createZip(String sourcePath, String zipPath) {
        FileOutputStream fos = null;
        ZipOutputStream zos = null;

        try {
            fos = new FileOutputStream(zipPath);
            zos = new ZipOutputStream(fos);
            writeZip(new File(sourcePath), "", zos);
        } catch (FileNotFoundException e) {
            log.error("创建ZIP文件失败", e);
        } finally {
            try {
                if (zos != null) {
                    zos.close();
                }
            } catch (IOException e) {
                log.error("创建ZIP文件失败", e);
            }
        }
    }

    private static void writeZip(File file, String parentPath, ZipOutputStream zos) {

        if (file.exists()) {
            //处理文件夹
            if (file.isDirectory()) {
                parentPath += file.getName() + File.separator;
                File[] files = file.listFiles();
                for (File f : files) {
                    writeZip(f, parentPath, zos);
                }
            } else {
                FileInputStream fis = null;
                DataInputStream dis = null;
                try {
                    fis = new FileInputStream(file);
                    dis = new DataInputStream(new BufferedInputStream(fis));
                    ZipEntry ze = new ZipEntry(parentPath + file.getName());
                    zos.putNextEntry(ze);
                    //添加编码,如果不添加,当文件以中文命名的情况下,会出现乱码
                    // ZipOutputStream的包一定是apache的ant.jar包。JDK也提供了打压缩包,但是不能设置编码
                    zos.setEncoding("GBK");
                    byte[] content = new byte[1024];
                    int len;
                    while ((len = fis.read(content)) != -1) {
                        zos.write(content, 0, len);
                        zos.flush();
                    }
                } catch (IOException e) {
                    log.error("创建ZIP文件失败", e);
                } finally {
                    try {
                        if (dis != null) {
                            dis.close();
                        }
                    } catch (IOException e) {
                        log.error("创建ZIP文件失败", e);
                    }
                }
            }
        }
    }

    /**
     * 下载远程文件并保存到本地                
     *          
     * @param remoteFilePath 远程文件路径                   
     * @param localFilePath  本地文件路径           
     */              
    public static void downloadFile(String remoteFilePath, String localFilePath) {
        URL urlfile = null;
        HttpURLConnection httpUrl = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        File f = new File(localFilePath);
        try {
            urlfile = new URL(remoteFilePath);
            httpUrl = (HttpURLConnection) urlfile.openConnection();
            httpUrl.connect();
            bis = new BufferedInputStream(httpUrl.getInputStream());
            bos = new BufferedOutputStream(new FileOutputStream(f));
            int len = 2048;
            byte[] b = new byte[len];
            while ((len = bis.read(b)) != -1) {
                bos.write(b, 0, len);
            }
            bos.flush();
            bis.close();
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (bis != null) {
                    bis.close();
                }
                if (bos != null) {
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {

        ZipUtils.createZip("D:\\zzzzzzzz\\", "D:\\ddd.zip");


    }

###在线下载压缩文件

package com.zichan360.springbootserver.util;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.UUID;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**
 * 创建用户:杨辽
 * 创建时间:2016-11-01 15:52:00
 * 描    述:
 */
public class ZipUtils {

    private static final Logger log = LoggerFactory.getLogger(ZipUtils.class);

    private ZipUtils() {
    }

    /**
     * 下载远程文件
     *
     * @param remoteFilePath url
     */
    public static InputStream downloadFile(String remoteFilePath) {
       /*http获取文件*/
        try {
            HttpURLConnection httpUrl = (HttpURLConnection) new URL(remoteFilePath).openConnection();
            InputStream stream = httpUrl.getInputStream();
            httpUrl.connect();
            return stream;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @param remoteFilePath url
     * @param zos            生成的zip文件存在路径(包括文件名)
     */
    private static void writeZip(String remoteFilePath, ZipOutputStream zos) {
        UUID uuid = UUID.randomUUID();

        //获取远程文件流
        InputStream stream = downloadFile(remoteFilePath);

        if (null != stream) {
            DataInputStream dis = null;
            try {
                dis = new DataInputStream(new BufferedInputStream(stream));
                ZipEntry ze = new ZipEntry(uuid + ".wav");
                zos.putNextEntry(ze);
                //添加编码,如果不添加,当文件以中文命名的情况下,会出现乱码
                // ZipOutputStream的包一定是apache的ant.jar包。JDK也提供了打压缩包,但是不能设置编码
                zos.setEncoding("GBK");
                byte[] content = new byte[1024];
                int len;
                while ((len = stream.read(content)) != -1) {
                    zos.write(content, 0, len);
                    zos.flush();
                }
            } catch (IOException e) {
                log.error("创建ZIP文件失败", e);
            } finally {
                try {
                    stream.close();
                    if (dis != null) {
                        dis.close();
                    }
                } catch (IOException e) {
                    log.error("创建ZIP文件失败", e);
                }
            }
        }
    }




    public static void main(String[] args) {

        try {
            FileOutputStream fos = new FileOutputStream("D:\\ddd.zip");
            ZipOutputStream zos = new ZipOutputStream(fos);

            ZipUtils.writeZip("下载地址", zos);
            ZipUtils.writeZip("下载地址", zos);
            ZipUtils.writeZip("下载地址", zos);
            ZipUtils.writeZip("下载地址", zos);

            zos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

© 著作权归作者所有

说多了都是泪呀
粉丝 3
博文 114
码字总数 24591
作品 0
朝阳
程序员
私信 提问
图形化 Closure Compiler,JS 压缩工具

Google 为网站的开发人员提供了一些列对网站进行优化的工具。 Closure Compiler 就是其中之一,这个工具可以用来对 js 文件进行压缩,加快客户端加载的速度。 日前有网友用 Java 开发了一个图...

oschina
2012/08/14
3.1K
7
Linux下Tomcat的搭建以及开机自启动设置

首先进行下JDK的配置:   1.查看下系统信息,确认是32位还是64位:uname -a   2.下载相应位数的jdk压缩包,传到Linux系统,这里提供一个32位和64位的下载链接:https://pan.baidu.com/s...

武哥_话神
2018/04/27
0
0
Windows不能用鼠标双击运行jar文件怎么

Java应用程序jar文件可以由 JVM(Java虚拟机)直接执行,只要操作系统安装了JVM便可以运行作为Java应用程序的jar文件,其跨平台特性使得很多工具软件都用jar方式来部署分发,比如用于HP WebO...

java-苦苦甜甜
2013/06/26
0
0
Ubuntu 16.04安装JDK/JRE并配置环境变量(为虚拟机配置JAVA环境)

由于需要安装交通仿真工具VanetMobiSim,而它又需要工作在Java环境,所以首先把安装Java环境的过程记录下来。 操作环境:VMware Workstation 10 安装包百度云链接:https://pan.baidu.com/s...

wuzhiwuweisun
2018/05/29
0
0
基于spring-boot和elfinder的在线文件管理

大家好,我是帅气小伙,今天为大家分享的是一个轮子,最近在项目中需要一些CMS的功能,在线管理一些静态资源文件,在经过一番资料查找,最终决定使用elfinder。它的官方Java集成还是有点坑的...

帅气小伙
2018/05/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

HBase新建表报错 org.apache.hadoop.hbase.TableExistsException

之前安装了旧版本的hbase, 没有清理其在Zookeeper上的内容。 解决办法 stop-hbase.sh zkCli.sh >>> rmr /hbase >>> quit start-hbase.sh...

dreamness
18分钟前
1
0
大数据技术的应用现状与展望

本文是我即将由嵌入式底层驱动行业转入大数据研究领域的综述文章,案例摘自《程序员》电子期刊,由于初学者知识面较窄,查看文献量较少,因此后续还会在此基础上,继续跟踪并深入研究,为论文...

陈小君
25分钟前
1
0
NCRE考试感想 三级信息安全(上)

时间节点 报名时间:2017-06 考试时间:2017-09 查询成绩:2017-11   考试简述 满分100分,时间120分钟。题型有三种,选择题、综合题、应用题。   备考经验 题库是WLJY的,买了激活码。为了...

志成就
32分钟前
1
0
百度地图显示我的位置

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title><script type="text/javascript" src="jquery-1.8.2.min.js"></script></head><body><sec......

塔塔米
36分钟前
1
0
mysql mysql常用的常用函数

1. 数学函数 函 数 作 用 ABS(x) 返回x的绝对值 CEIL(x),CEILIN(x) 返回不小于x的最小整数值 FLOOR(x) 返回不大于x的最大整数值 RAND() 返回0~1的随机数 RAND(x) 返回0~1的随机数,x值相同返...

edison_kwok
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部