当前位置: 代码迷 >> J2SE >> java 怎么将多个文件打包成一个zip
  详细解决方案

java 怎么将多个文件打包成一个zip

热度:146   发布时间:2016-04-24 02:30:03.0
java 如何将多个文件打包成一个zip ?

我可以得到需要下载的文件路径
String[] path;//这个已知
就是如何将这些文件打包成一个zip供下载?
希望高手们写下详细代码.``

------解决方案--------------------
用zipentry zipoutputstream把文件打包,根据自己的应用修改一下代码代码
Java code
import java.util.List;import java.util.zip.*;import java.io.*;public class ZipCommand {     private static int ziplevel = 7;     private File sourceFile = null;     private File  zipFile = null;     private ZipOutputStream jos = null;     private ZipEntry sourEntry = null;     private String zipfileName = null;     private String sourceFileName = null;     private static byte[] buf = new byte[1024];          public static void main(String[] s){         ZipCommand tz = new ZipCommand();        //System.out.println( tz.AddtoZip("E:/cis-2000/document/CPoPUserSManual_CPoP_User_s_Manual.doc"));     }         public String AddtoZip(List sourcefilelist){        if(sourcefilelist == null || sourcefilelist.size()<1){            return null;        }        sourceFile = new File(sourcefilelist.get(0).toString());        if(!sourceFile.isFile()){            return null;        }else{            sourceFileName = sourceFile.getName();            this.setZipfileName(sourceFileName.substring(0,sourceFileName.lastIndexOf("."))+".zip");            try{            zipFile = new File(sourceFile.getParent(),this.getZipfileName());            if(zipFile.exists()){                int i = 1 ;                while(true){                    zipFile = new File(sourceFile.getParent(),this.getZipfileName().substring(0, getZipfileName().lastIndexOf(".zip")) + i + ".zip");                    if(!zipFile.exists()) break ;                    i++ ;                }            }            //System.out.println(zipFile.getPath());             if(zipFile.exists()){                 zipFile.deleteOnExit();             }             zipFile.createNewFile();             jos = new ZipOutputStream(new FileOutputStream(zipFile));             jos.setLevel(ziplevel);             for(int i=0;i<sourcefilelist.size();i++){                         Stzip(jos,new File(sourcefilelist.get(i).toString()));             }             jos.finish();            }catch(Exception e){                return null;            }            if(zipFile !=null)            return zipFile.getPath();            else{                return null;            }        }    }         private  void Stzip(ZipOutputStream jos, File file)     throws IOException, FileNotFoundException {                  sourEntry= new ZipEntry(file.getName());         FileInputStream fin = new FileInputStream(file);         BufferedInputStream in = new BufferedInputStream(fin);         jos.putNextEntry(sourEntry);         int len;         while ((len = in.read(buf)) >= 0)              jos.write(buf, 0, len);         in.close();         jos.closeEntry();               }         public File getSourceFile() {        return sourceFile;    }    public void setSourceFile(File sourceFile) {        this.sourceFile = sourceFile;    }    public String getZipfileName() {        return zipfileName;    }    public void setZipfileName(String zipfileName) {        this.zipfileName = zipfileName;    }    }
------解决方案--------------------
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
  
public class DirectoryZip {
public static void jar(String inputFileName, String outputFileName) throws Exception {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outputFileName));
out.setEncoding("GBK"); // ###### 这句话是关键,指定输出的编码方式
File f = new File(inputFileName);
jar(out, f, "");
  相关解决方案