使用Java导出zip压缩包,压缩包中包含一个文件夹和一个文件,其中文件夹包含另一个文件。

java excel压缩zip导出 java代码导出压缩包_java


代码:

package com.sunshuo.start;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

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

public class MainTest {

    public static void main(String[] args) {
        doExport();
    }

    private static void doExport() {
        String path = "D:\\tempfolder\\zip_outer\\";
        
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
        }
        
        File zipFile = null;
        FileOutputStream fos = null; 
        ZipOutputStream zos = null; 
        
        try {
            // 压缩包名
            Date currentTime = new Date();
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
            String dateString = formatter.format(currentTime);
            zipFile = new File(path + "sunshuo_" + dateString + ".zip");
            zipFile.createNewFile();
            fos = new FileOutputStream(zipFile);
            zos = new ZipOutputStream(fos);
            zos.setEncoding("GBK"); // 防止压缩包里文件名乱码
            
            // 文件01,在文件夹01里
            String file01Name = "文件夹01\\文件01.txt";
            ZipEntry zipEntry1 = new ZipEntry(file01Name); 
            zos.putNextEntry(zipEntry1);
            String content1 = "文件内容1111";
            zos.write(content1.getBytes("UTF-8"));
            
            // 文件02,在根目录下
            String file02Name = "文件02.txt";
            ZipEntry zipEntry2 = new ZipEntry(file02Name); 
            zos.putNextEntry(zipEntry2);
            String content2 = "文件内容2222";
            zos.write(content2.getBytes("UTF-8"));

            zos.flush();
            zos.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(fos != null){
                    fos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

总结点:
1)如果想把文件放入到zip包里目录中,可以使用拼接路径的方式。比如文件01。
2)如果压缩包中的文件名乱码,可以使用zos.setEncoding(“GBK”); 方式解决。
3)zos.setEncoding(“GBK”);中,ZipOutputStream的全路径是org.apache.tools.zip.ZipOutputStream,ZipEntry的全路径是org.apache.tools.zip.ZipEntry,需要借助第三方的包。