分享

zip

 天天new 2013-05-11
一个zip文件可能是压缩一个或多个文件,对于每一个我们都需要创建一个ZipEntry对象并依次放进Zip文件中
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;


public class Zip {
public static void main(String[] args) {
File f=new File("GUI");
createZip(f+".zip",f);
}

private static void createZip(String obj, File f) {
try {
ZipOutputStream zop=new ZipOutputStream(new FileOutputStream(obj));
ZipInputStream zip=new ZipInputStream(new FileInputStream(obj));
ZipEntry ze=new ZipEntry(obj);
zop.putNextEntry(ze);
compressFile(zop,"",f);
deCompressFile(zip,obj);
zop.close();
zip.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

private static void deCompressFile(ZipInputStream zip, String source) {
try {
ZipEntry en=null;
while((en=zip.getNextEntry())!=null)
{
String obj=en.getName();
File file=new File(obj);
File path=null;
if(file.getParentFile().exists()) 
path=new File(file.getParentFile().getPath());
if(en.isDirectory())
{
if(!file.exists())
file.mkdirs();
continue;
}
if(!path.exists())
{
path.mkdirs();
}
FileOutputStream out= new FileOutputStream(file);
byte[] buf=new byte[1024];
int len;
while((len=zip.read(buf))!=-1)
{
out.write(buf,0,len);
}
out.close();
}
zip.closeEntry();
} catch (FileNotFoundException e) {
} catch (IOException e) {
e.printStackTrace();
}
}

private static void compressFile(ZipOutputStream zop, String dir,File f) throws IOException {
if(f.exists())
if(f.isDirectory())
{
File[] files=f.listFiles();
dir=dir+(dir.length()==0?"":"/")+f.getName();
for(File file:files)
{
compressFile(zop,dir,file);
}
}
else
{
InputStream is = new BufferedInputStream(new FileInputStream(f));
        int readLen = -1;
        byte[] buf=new byte[1024];
        
      
        while ((readLen = is.read(buf)) != -1) {
                zop.write(buf, 0, readLen);
        }
        is.close();
}
}
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约