完全实现 各种变态路径的解压缩,支持在 Web 上运行(在数字签名中遇到的问题,想到了用这种写法)

本文介绍了一个用于解压ZIP格式文件的Java工具类。该工具支持从URL或本地文件路径读取ZIP文件,并将其内容解压到指定的目标文件夹。通过创建ZipInputStream并遍历ZipEntry来处理每个文件和文件夹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.aspire.reportPlatform.webagent;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLConnection;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
 * 
 * @author Jhonson Lee
 * 实现各种路径的解压缩, 包括  url 和 绝对路径
 */
public class UnZipUtil {
	
	/**
	 * 
	 * @param sourceFile  源文件
	 * @param outputFolder 输出的目标目录
	 */
	public static void unZipResources(String sourceFile,String outputFolder){
		
    	String archivePath = sourceFile;
    	ZipInputStream zis = null;
		ZipEntry entry = null;
		URLConnection con = null;
		String rdpOutputFolder = outputFolder;
		
		File configFile=new File(rdpOutputFolder);
		if(!configFile.exists()) {
			configFile.mkdir();
		}
			
		try {
			con = (new URL(archivePath)).openConnection();
			con.setUseCaches(false);
			con.connect();
			zis = new ZipInputStream(con.getInputStream());
			while ((entry = zis.getNextEntry()) != null){
				if (entry.isDirectory()) {
                    String name = entry.getName();
                    name = name.substring(0, name.length() - 1);
                    File f = new File(rdpOutputFolder + File.separator + name);
                    f.mkdir();
                } else {
                	unZipResource(zis, entry.getName(),rdpOutputFolder);
                }
				
			}
		} catch (IOException ioe) {
			StatusPanel.getStatusPanelInstance().setStatus((byte) 8);
			ioe.printStackTrace();
			//			LogFile.getInstance().print(0,
			// "WebAgentApplet.installLibraries()",
			//					"install have IOException ");
		}catch(Exception e){
		    e.printStackTrace();	
		}finally {
			con = null;
			try {
				zis.close();
			} catch (IOException e) {
				// TODO 自动生成 catch 块
				e.printStackTrace();
			}
		}
    }
    /**
     * 
     * @param archive
     * @param configResourceName
     * @param path
     */
    private static void unZipResource(ZipInputStream archive, String configResourceName,String path){
    	BufferedOutputStream out = null;
		byte buffer[] = new byte[1024];
		int count = 0;
		String configFullPathName = path + File.separator + configResourceName;
		
		try {
			out = new BufferedOutputStream(
					new FileOutputStream(configFullPathName));
			while ((count = archive.read(buffer)) > 0)
				out.write(buffer, 0, count);
			out.close();
		} catch (IOException e) {
			
			e.printStackTrace();
		}catch(Exception e){
		    e.printStackTrace();	
		}finally{
			try {
				out.close();
			} catch (IOException e1) {
				// TODO 自动生成 catch 块
				e1.printStackTrace();
			}
		}

		
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值