Java解压缩zip文件

下面实现的功能是zip文件中的图像文件解压到当前目录下,用jdk自带的处理zip文件的代码处理的,但是不能处理中文名称的文件,要不然就会出错。

 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**
 * 不能处理中文文件名
 */
public class UnZip 
{
	private static final int buffer = 2048; 
	
	public static void main(String[] args) 
	{
		unZip("D:\\ss\\test.zip");
	}

	public static void unZip(String path) 
	{
		int count = -1;
		int index = -1;
		
		String savepath = "";
		boolean flag = false;
		
		savepath = path.substring(0, path.lastIndexOf("\\")) + "\\";

		try 
		{
			BufferedOutputStream bos = null;
			ZipEntry entry = null;
			FileInputStream fis = new FileInputStream(path); 
			ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
			
			while((entry = zis.getNextEntry()) != null) 
			{
				byte data[] = new byte[buffer]; 

				String temp = entry.getName();
				
				flag = isPics(temp);
				if(!flag)
					continue;
				
				index = temp.lastIndexOf("/");
				if(index > -1)
					temp = temp.substring(index+1);
				temp = savepath + temp;
				
				File f = new File(temp);
				f.createNewFile();

				FileOutputStream fos = new FileOutputStream(f);
				bos = new BufferedOutputStream(fos, buffer);
				
				while((count = zis.read(data, 0, buffer)) != -1) 
				{
					bos.write(data, 0, count);
				}

				bos.flush();
				bos.close();
			}

			zis.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static boolean isPics(String filename)
	{
		boolean flag = false;
		
		if(filename.endsWith(".jpg") || filename.endsWith(".gif")  || filename.endsWith(".bmp") || filename.endsWith(".png"))
			flag = true;
		
		return flag;
	}
}

 

下面是用的apache的zip文件处理包进行处理的,可以处理中文名称的文件,功能跟上面的一样。

 

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;

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

/**
 * 可以处理中文文件名
 */
public class UnZip2 
{
	private static final int buffer = 2048;
	
	public static void main(String[] args)
	{
		unZip("D:\\ss\\test.zip");
	}
	
	public static void unZip(String path)
	{
        int count = -1;
        int index = -1;
        String savepath = "";
		boolean flag = false;
		
		File file = null; 
        InputStream is = null;  
        FileOutputStream fos = null;  
        BufferedOutputStream bos = null;
        
		savepath = path.substring(0, path.lastIndexOf("\\")) + "\\";

        try
        { 
        	ZipFile zipFile = new ZipFile(path); 

        	Enumeration<?> entries = zipFile.getEntries();
        	
            while(entries.hasMoreElements())
            { 
            	byte buf[] = new byte[buffer]; 
            	
                ZipEntry entry = (ZipEntry)entries.nextElement(); 
                
                String filename = entry.getName();
                index = filename.lastIndexOf("/");
				if(index > -1)
					filename = filename.substring(index+1);
				
                filename = savepath + filename;
                
                flag = isPics(filename);
                if(!flag)
                	continue;
                
                file = new File(filename); 
                file.createNewFile();
                
                is = zipFile.getInputStream(entry); 
                
                fos = new FileOutputStream(file); 
                bos = new BufferedOutputStream(fos, buffer);
                
                while((count = is.read(buf)) > -1)
                { 
                    bos.write(buf, 0, count ); 
                } 
                
                fos.close(); 

                is.close(); 
            } 
            
            zipFile.close(); 
            
        }catch(IOException ioe){ 
            ioe.printStackTrace(); 
        } 
    } 

	public static boolean isPics(String filename)
	{
		boolean flag = false;
		
		if(filename.endsWith(".jpg") || filename.endsWith(".gif")  || filename.endsWith(".bmp") || filename.endsWith(".png"))
			flag = true;
		
		return flag;
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值