java教程

JAVA 服务端zip打包下载文件

位置:首页 > java教程 > java技巧,2013-09-08
这几天有一个需求说,一个点击操作,需要产生多个文件的下载,理论上是不可行的。应该一个请求只能有一个响应。所以,考虑把多个文件打包成一个zip包后,再下载。上网搜了一下,可以利用ZipOutputStr...

这几天有一个需求说,一个点击操作,需要产生多个文件的下载,理论上是不可行的。应该一个请求只能有一个响应。所以,考虑把多个文件打包成一个zip包后,再下载。上网搜了一下,可以利用ZipOutputStream类。一开始,什么都不知道,于是随便用的是java.util.zip.ZipOutputStream。后来,发现,尽管产生的文件在服务端没有乱码问题,但是当文件添加到zip包里面后,在客户端下载得到的zip包里面,得到的中文文件名都是乱码。于是在想,换一下编码应该可以吧。试了半天还是不行,又搜了半天,才发现,java.util.zip.ZipOutputStream缺乏编码的转换,中文乱码问题肯定是解决不了的。再搜,发现apache也有一个org.apache.tools.zip.ZipOutputStream,方法声明的什么都一样。于是把类的引用路径改了一下,运行。成功了!!!!

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

    String zipfilename = "result.zip";
    String zipfilepath = storagePath + zipfilename;
    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipfilepath)));
    byte[] buf = new byte[2048];
    int len;

    String fileName = "我是中文名.txt"; 
    File file = new File(storagePath + fileName);
    if(!file.exists()){//文件不存在,创建
        file.createNewFile();
    }
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));//指定字符编码
    bw.write(sb.toString());//往文件中写内容
    bw.close();
    
    ZipEntry ze = new ZipEntry(file.getName());//往zip包写
    zos.putNextEntry(ze);
    BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    while((len = bis.read(buf)) > 0){
        zos.write(buf, 0, len);
    }
    bis.close();
    zos.closeEntry();
    zos.close();

TAGS:JAVA下载文件

猜你喜欢

NewHot