athrunwang

纪元
数据加载中……
java实现zip与unzip
jdk提供了Zip相关的类方便的实现压缩和解压缩。使用方法很简单。下边分别是压缩和解压缩的简单事例
1,压缩的
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.ZipOutputStream;

public class Zip {
    
static final int BUFFER = 2048;

    
public static void main(String argv[]) {
        
try {
            BufferedInputStream origin 
= null;
            FileOutputStream dest 
= new FileOutputStream("E:\\test\\myfiles.zip");
            ZipOutputStream out 
= new ZipOutputStream(new BufferedOutputStream(
                    dest));
            
byte data[] = new byte[BUFFER];
            File f 
= new File("e:\\test\\a\\");
            File files[] 
= f.listFiles();

            
for (int i = 0; i < files.length; i++{
                FileInputStream fi 
= new FileInputStream(files[i]);
                origin 
= new BufferedInputStream(fi, BUFFER);
                ZipEntry entry 
= new ZipEntry(files[i].getName());
                out.putNextEntry(entry);
                
int count;
                
while ((count = origin.read(data, 0, BUFFER)) != -1{
                    out.write(data, 
0, count);
                }

                origin.close();
            }

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

    }

}


2,解压缩的。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class UnZip {
    
static final int BUFFER = 2048;

    
public static void main(String argv[]) {
        
try {
            String fileName 
= "E:\\test\\myfiles.zip";
            String filePath 
= "E:\\test\\";
            ZipFile zipFile 
= new ZipFile(fileName);
            Enumeration emu 
= zipFile.entries();
            
int i=0;
            
while(emu.hasMoreElements()){
                ZipEntry entry 
= (ZipEntry)emu.nextElement();
                
//会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。
                if (entry.isDirectory())
                
{
                    
new File(filePath + entry.getName()).mkdirs();
                    
continue;
                }

                BufferedInputStream bis 
= new BufferedInputStream(zipFile.getInputStream(entry));
                File file 
= new File(filePath + entry.getName());
                
//加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件
                
//而这个文件所在的目录还没有出现过,所以要建出目录来。
                File parent = file.getParentFile();
                
if(parent != null && (!parent.exists())){
                    parent.mkdirs();
                }

                FileOutputStream fos 
= new FileOutputStream(file);
                BufferedOutputStream bos 
= new BufferedOutputStream(fos,BUFFER);           
                
                
int count;
                
byte data[] = new byte[BUFFER];
                
while ((count = bis.read(data, 0, BUFFER)) != -1)
                
{
                    bos.write(data, 
0, count);
                }

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

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

    }

}

posted on 2012-01-03 17:31 AthrunWang 阅读(197) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: