精华内容
下载资源
问答
  • java zip压缩

    2018-10-10 12:00:16
    java压缩文件为.zip。用户导出、下载文档时,先压缩再下载,可节约时间,内存,流量。
  • JAVA zip压缩

    2017-06-07 17:25:48
    java zip压缩需要的类,全部在java.util.zip包下。 如果仅仅是在内存中使用,可以使用Deflater类就可以了。 具体的用法就如下面的代码: Deflater deflater = new Deflater(); deflater.setInput("hello, world!"....

    java zip压缩需要的类,全部在java.util.zip包下。
    如果仅仅是在内存中使用,可以使用Deflater类就可以了。
    具体的用法就如下面的代码:

     Deflater deflater = new Deflater();
    deflater.setInput("hello, world!".getBytes());
    deflater.finish();
    byte[] buf = new byte[100];
    int length = deflater.deflate(buf);
    deflater.end();

    首先是创建一个Deflater 的对象。然后输入数据,调用deflate方法,这个方法返回的是在byte数组内写入的长度。
    这个长度可以用在Outputstream的writer方法中,比如outputStream.write(bytes,0,length);
    但是如果要生成zip文件,则需要使用ZipOutputStream了。
    与一般的outputstream不同的是,它需要使用到entry。
    因为zip包,在逻辑上像一个空的文件夹,需要往里边放东西。放一个文件需要先调用putNextEntry方法,再使用普通IO流的方法去写入数据,写完之后调用closeEntry。然后在放入第二个文件,直到所有文件压缩完,就可以调用close方法来关闭流。代码如下:

     ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(file));
     zout.putNextEntry(new ZipEntry("a.text"));
     zout.write("hello, world!".getBytes());
     zout.closeEntry();
     zout.close();

    那么怎么放文件夹呢?zip在逻辑上其实就是个目录结构。既然是目录结构那么就有目录。
    我就不卖关子了。目录就是entry的名字以/结尾。比如下面的代码:

    zout.putNextEntry(new ZipEntry("videos/"));
    zout.closeEntry();
    展开全文
  • Java Zip 压缩

    2016-12-07 18:59:20
    Java Zip 多文件压缩

    Java Zip 压缩

    最近需要使用到 Java 对多个文件进行压缩打包,而 Java 提供的基本的 Zip 功能并不能满足我的需求,因此在此基础上,我对其进行了封装已满足我的需求。其实,我的需求也并不复杂,就是将多个文件通过 zip 打包到一个压缩文件中,由于之前没有怎么接触过 Java,因此在这里记录一下,以方便以后查询。

    实现

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class Zip {
    
        public static void main(String[] args) {
            zip("cplusplus", "cplusplus/a.out", "cplusplus/test.cc", "cplusplus/writing/ShortPath.java");
        }
    
        /**
         * 压缩给定的文件到 *zipFileName* 中
         * @param zipFileName 压缩后的文件名,函数会在该文件名后添加 zip 后缀
         * @param filenames 待压缩文件名
         * @return true - 成功, false - 失败
         */
        public static boolean zip(String zipFileName, String ... filenames) {
            try {
                ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName + ".zip"));
    
                for (String name : filenames) {
                    File file = new File(name);
                    if (file != null) {
                        zip(outputStream, file, file.getName());            
                    }       
                }
    
                outputStream.close();
                return true;
    
            } catch (Exception e) {
                e.printStackTrace();        
            }
    
            return false;   
        }
    
        /**
         * 递归压缩
         * @param out Zip 的输出流
         * @param file 待压缩的文件对象
         * @param filename 待压缩的文件名
         * @note 若 file 为目录时,该函数将递归的压缩其子目录
         */
        public static void zip(ZipOutputStream out, File file, String filename) throws IOException {
            if (file.isDirectory()) {
                File[] files = file.listFiles();
                if (files.length == 0) {
                    out.putNextEntry(new ZipEntry(filename + "/"));     
                }
    
                for (File f : files) {
                    zip(out, f, filename + "/" + f.getName());      
                }       
            } else {
                out.putNextEntry(new ZipEntry(filename));
                FileInputStream inputStream = new FileInputStream(file);
                BufferedInputStream bi = new BufferedInputStream(inputStream);
                int b;
                while ((b = bi.read()) != -1) {
                    out.write(b);       
                }
                out.closeEntry();
                inputStream.close();        
            }   
        }
    }
    展开全文
  • Java ZIP 压缩

    2010-06-04 16:16:04
    Java ZIP 压缩   package test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; ...

    随便搜到的别人写的一段代码

    Java ZIP 压缩

     

    package test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class TestZip
    {
        
        public TestZip()
        {
            
        }
        
        public static void main(String[] args) throws IOException
        {
            new TestZip().zip("D:\\temp\\testTerm\\sourceFile", "D:\\temp\\testTerm\\myRtn.zip");
        }
        
        private static final int BUFFEREDSIZE = 1024; 
        
        public synchronized void zip(String inputFilename, String zipFilename) throws IOException {    
            zip(new File(inputFilename), zipFilename);    
        }    
            
        public synchronized void zip(File inputFile, String zipFilename) throws IOException {    
            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilename));    
       
            try {    
                zip(inputFile, out, "");    
            } catch (IOException e) {    
                throw e;    
            } finally {    
                out.close();    
            }    
        }    
       
        private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException {    
            if (inputFile.isDirectory()) { 
                File[] inputFiles = inputFile.listFiles();    
                out.putNextEntry(new ZipEntry(base + "/"));   
                base = base.length() == 0 ? "" : base + "/";    
                for (int i = 0; i < inputFiles.length; i++) {  
                    zip(inputFiles[i], out, base + inputFiles[i].getName());    
                }    
            } else {    
                if (base.length() > 0) {    
                    out.putNextEntry(new ZipEntry(base));    
                } else {    
                    out.putNextEntry(new ZipEntry(inputFile.getName()));    
                }    
       
                FileInputStream in = new FileInputStream(inputFile);    
                try {    
                    int c;    
                    byte[] by = new byte[BUFFEREDSIZE];    
                    while ((c = in.read(by)) != -1) {    
                        out.write(by, 0, c);    
                    }    
                } catch (IOException e) {    
                    throw e;    
                } finally {   
                    in.close();    
                }    
            }    
        }
        
    }
    
     

     

    展开全文
  • Java zip压缩

    2016-11-09 17:16:35
    Java中有与zip相关的api,位于java.util.zip.*包下。 在一些应用场景中,可能需要对程序生成的文件如导出比较大的excel文件,然后需要对其压缩上传。 在《Java 核心技术 卷二 高级特性》这本书中就有关于zip的介绍...

    Java中有与zip相关的api,位于java.util.zip.*包下。
    在一些应用场景中,可能需要对程序生成的文件如导出比较大的excel文件,然后需要对其压缩上传。
    《Java 核心技术 卷二 高级特性》这本书中就有关于zip的介绍,下面将其摘录如下:

    1.读取zip文件

    zip文档通常以压缩格式存储了一个或多个文件,每个zip文档都有一个包含诸如文件名字和所使用的压缩方法等信息的头。在Java中,可以使用ZipInputStream来读入zip文档。
    你可能需要浏览文档中每个单独的项,getNextEntry方法就可以返回一个描述这些项的ZipEntry类型的对象。ZipInputStream的read方法被修改为在碰到当前项的结尾时返回-1(而不是碰到zip文件的末尾),然后你必须调用closeEntry来读入下一项。下面是典型的通读zip文件的伪代码:

    ZipInputStream zin = new ZipInputStream(new FileInputStream(zipname));
    ZipEntry entry;
    while((entry=zin.getNextEntry())!=null)
    {
        analyze entry;
        read the contents of zin;
        zin.closeEntry();
    }
    zin.close();

    当希望读入某个zip项的内容时,我们可能并不想使用原生的read方法,通常,我们将使用某个更能胜任的流过滤器的方法。例如,为了读入zip文件内部的一个文本文件,我们可以使用下面的循环:

    Scanner in = new Scanner(zin);
    while(in.hasNextLine())
        do something with in.nextLine();

    注意: zip输入流在读入zip文件发生错误时,会抛出ZipException。通常这种错误在zip文件被破坏时发生。

    2.写出到zip文件

    要写出到zip文件,可以使用ZipOutputStream,而对于你希望放入到zip文件中的每一项,都应该创建一个ZipEntry对象,并将文件名传递给ZipEntry的构造器,它将设置其他诸如文件日期和解压缩方法等参数。如果需要,你可以覆盖这些设置。然后,你需要调用ZipOutputStream的putNextEntry方法来开始写出新文件,并将文件数据发送到zip流中。当完成时,需要调用closeEntry。然后,你需要对所有你希望存储的文件都重复这个过程。下面是代码框架:

    FileOutputStream fout = new FileOutputStream("test.zip");
    ZipOutputStream zout = new ZipOutputStream(fout);
    for all files
    {
        ZipEntry ze = new ZipEntry(filename);//  file.getName();
        zout.putNextEntry(ze);
        send data to zout;
        zout.closeEntry();
    }
    zout.close();

    注意: ZipEntry ze = new ZipEntry(filename);中的filename,这个路径是相对路径(相对于test.zip这个zip文件的路径),所以如果是目录层级的话,需要加上层级目录。

    上面这段伪代码非常重要,可以帮助你很好的理解下面的递归结构程序。

    package test;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    public class ZipUtils {
        public static final String EXT = ".zip";  
        // 符号"/"用来作为目录标识判断符  
        private static final String PATH = "/";  
        private static final int BUFFER = 1024;  
    
        /**
         * 压缩文件或文件夹
         * @param zipOutfile zip输出文件
         * @param file 待压缩的文件或文件夹
         * @throws IOException
         */
        public static void compressFile(File zipOutfile,File file) throws IOException{
            System.out.println("Begin Compress file ...");
            String zipname = zipOutfile.getName();
            File outfile = new File(zipOutfile.getParent(),zipname.substring(0, zipname.lastIndexOf("."))+EXT);
            if(outfile.exists()) return;
            ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(outfile));
            putEntry(zout,file,PATH);
            zout.close();
            System.out.println("END");
        }
        /**
         * 递归地将 文件或目录 放置到输出流中 
         * @param zout
         * @param file 
         * @param curdir 当前目录层级
         * @throws IOException
         */
        private static void putEntry(ZipOutputStream zout,File file,String curdir) throws IOException{
            if(file.isFile()){
                ZipEntry ze = new ZipEntry(curdir+file.getName());
                zout.putNextEntry(ze);
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream(  
                        file));  
                byte[] b = new byte[BUFFER];
                int count ;
                while((count=bis.read(b, 0, BUFFER))!=-1)
                    zout.write(b, 0, count);
                bis.close();
                zout.closeEntry();
            }else{
                ZipEntry ze = new ZipEntry(curdir+file.getName()+PATH);//放置目录到zout  带 / 表示目录
                zout.putNextEntry(ze);
                zout.closeEntry();
                for(File f : file.listFiles()) 
                    putEntry(zout,f,curdir+file.getName()+PATH);
            }
        }
        /**
         * 压缩文件或目录 实际调用的是compressFile(ZipOutputStream,File)
         * @param file 文件或目录
         * @throws IOException
         */
        public static void compressFile(File file)throws IOException{
            System.out.println("Begin Compress single file or dir...");
            String zipname = file.getName();
            System.out.println(file.getName()+","+file.getParent()+","+file.getPath());
            if(file.isFile()){
                File zipOutfile = new File(file.getParent(),zipname.substring(0, zipname.lastIndexOf("."))+EXT);
                compressFile(zipOutfile,file);
            }else{
                File zipOutfile = new File(file.getParent(),zipname+EXT);
                compressFile(zipOutfile,file);
            }
        }
    
        public static void main(String[] args) throws Exception {
            //File file = new File("E:\\CSV\\f.txt");
            File file = new File("E:/CSV/fd");
            compressFile(file);
        }
    }
    

    在压缩某个文件夹时,比较费解的是如何将该文件夹的文件都放置在一个zip中,并且文件的层级关系保持不变,所以上面递归的核心地方是当子文件是文件夹时,需要递归地将该子文件夹中的文件entry放置到该文件夹下,所以参数需要传递一个表示当前层级的curdir。

    展开全文
  • javaZIP压缩源代码

    2019-03-04 15:07:41
    javaZIP压缩源代码,可以很方便的进行打包.源码含有详细的注释.
  • Java Zip压缩实现

    2021-01-20 03:37:32
     java将有关zip压缩的内容都封装在java.util.zip宝中,用java实现zip压缩,不用考虑压缩算法,java已经将这些进行了封装  实际上用java实现zip压缩涉及的是一个“输入输出流”的概念  用java实现一个文件的zip...
  • Java Zip压缩

    2007-01-25 20:27:00
    import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io....import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStre
  • javaZIP压缩文件

    2019-09-30 12:18:37
    问题描述: java ZIP压缩文件 问题解决: 说明: 防止创建压缩文件中中文乱码,需要导入的包: (1)创建ZipOutputStream 注: 以上引用org.apache.tools.zip.ZipOutputStream可以防止中文乱码 (2)单文件压缩 注:...
  • java zip 压缩解压例子

    2012-01-30 11:53:29
    java zip 压缩解压例子
  • java ZIP压缩文件

    2019-09-30 12:19:45
    问题描述: 使用java ZIP压缩文件和目录 问题解决: (1)单个文件压缩 注: 以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建ZipEntry,其中每一个创建的ZipEntry对应一个写入的文件...
  • java zip压缩解压 工具类 java zip压缩解压 工具类
  • java zip压缩和解压缩文件,附带ant.jar
  • Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
  • java zip 压缩与解压

    2017-04-18 14:15:00
    java zip 压缩与解压 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util....
  • javazip压缩

    2016-08-22 10:04:39
    利用zip进行数据压缩
  • javazip压缩和解压缩

    2014-11-18 10:52:17
    java原生的zip压缩和解压缩
  • Java Zip压缩 解压缩

    2018-09-24 19:15:22
    import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io....import java.util.zip.ZipEntry; import java.util.zip.ZipI...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,537
精华内容 3,014
关键字:

javazip压缩

java 订阅