ZIP in java

Hi,Is there way to ZIP several HTML's files in java program?
Any suggestion would be appreciate.

import java.io.*;
import java.util.zip.*;
public class GZIPcompress {
// Throw exceptions to console:
public static void main(String[] args)
throws IOException {
BufferedReader in =new BufferedReader(new FileReader(args[0]));
BufferedOutputStream out =new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream("test.gz")));
System.out.println("Writing file");
int c;
while((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
System.out.println("Reading file");
BufferedReader in2 =new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream("test.gz"))));
String s;
while((s = in2.readLine()) != null)
System.out.println(s);
try this example....
kept this file in a folder
and try add all the html files to the folder and kept..

Similar Messages

  • Cannot extract Zip file with Winzip after zipping with java.util.zip

    Hi all,
    I write a class for zip and unzip the text files together which can be zip and unzip successfully with Java platform. However, I cannot extract the zip file with Winzip or even WinRAR after zipping with Java platform.
    Please help to comment, thanks~
    Below is the code:
    =====================================================================
    package myapp.util;
    import java.io.* ;
    import java.util.TreeMap ;
    import java.util.zip.* ;
    import myapp.exception.UserException ;
    public class CompressionUtil {
      public CompressionUtil() {
        super() ;
      public void createZip(String zipName, String fileName)
          throws ZipException, FileNotFoundException, IOException, UserException {
        FileOutputStream fos = null ;
        BufferedOutputStream bos = null ;
        ZipOutputStream zos = null ;
        File file = null ;
        try {
          file = new File(zipName) ; //new zip file
          if (file.isDirectory()) //check if it is a directory
         throw new UserException("Invalid zip file ["+zipName+"]") ;
          if (file.exists() && !file.canWrite()) //check if it is readonly
         throw new UserException("Zip file is ReadOnly ["+zipName+"]") ;
          if (file.exists()) //overwrite the existing file
         file.delete();
          file.createNewFile();
          //instantiate the ZipOutputStream
          fos = new FileOutputStream(file) ;
          bos = new BufferedOutputStream(fos) ;
          zos = new ZipOutputStream(bos) ;
          this.writeZipFileEntry(zos, fileName); //call to write the file into the zip
          zos.finish() ;
        catch (ZipException ze) {
          throw ze ;
        catch (FileNotFoundException fnfe) {
          throw fnfe ;
        catch (IOException ioe) {
          throw ioe ;
        catch (UserException ue) {
          throw ue ;
        finally {
          //close all the stream and file
          if (fos != null)
         fos.close() ;
          if (bos != null)
         bos.close();
          if (zos != null)
         zos.close();
          if (file != null)
         file = null ;
        }//end of try-catch-finally
      private void writeZipFileEntry(ZipOutputStream zos, String fileName)
          throws ZipException, FileNotFoundException, IOException, UserException {
        BufferedInputStream bis = null ;
        File file = null ;
        ZipEntry zentry = null ;
        byte[] bArray = null ;
        try {
          file = new File(fileName) ; //instantiate the file
          if (!file.exists()) //check if the file is not exist
         throw new UserException("No such file ["+fileName+"]") ;
          if (file.isDirectory()) //check if the file is a directory
         throw new UserException("Invalid file ["+fileName+"]") ;
          //instantiate the BufferedInputStream
          bis = new BufferedInputStream(new FileInputStream(file)) ;
          //Get the content of the file and put into the byte[]
          int size = (int) file.length();
          if (size == -1)
         throw new UserException("Cannot determine the file size [" +fileName + "]");
          bArray = new byte[(int) size];
          int rb = 0;
          int chunk = 0;
          while (((int) size - rb) > 0) {
         chunk = bis.read(bArray, rb, (int) size - rb);
         if (chunk == -1)
           break;
         rb += chunk;
          }//end of while (((int)size - rb) > 0)
          //instantiate the CRC32
          CRC32 crc = new CRC32() ;
          crc.update(bArray, 0, size);
          //instantiate the ZipEntry
          zentry = new ZipEntry(fileName) ;
          zentry.setMethod(ZipEntry.STORED) ;
          zentry.setSize(size);
          zentry.setCrc(crc.getValue());
          //write all the info to the ZipOutputStream
          zos.putNextEntry(zentry);
          zos.write(bArray, 0, size);
          zos.closeEntry();
        catch (ZipException ze) {
          throw ze ;
        catch (FileNotFoundException fnfe) {
          throw fnfe ;
        catch (IOException ioe) {
          throw ioe ;
        catch (UserException ue) {
          throw ue ;
        finally {
          //close all the stream and file
          if (bis != null)
         bis.close();
          if (file != null)
         file = null ;
        }//end of try-catch-finally
    }

    Tried~
    The problem is still here~ >___<
    Anyway, thanks for information sharing~
    The message is:
    Cannot open file: it does not appear to be a valid archive.
    If you downloaded this file, try downloading the file again.
    The problem may be here:
    if (fos != null)
    fos.close() ;
    if (bos != null)
    bos.close();
    if (zos != null)
    zos.close();
    if (file != null)
    file = null ;
    The fos is closed before bos so the last buffer is not
    saved.
    zos.close() is enough.

  • Cannot use winzip to unzip the zip file zipped by java.util.zip

    Hi all,
    I use the followcode to create a zip file, and i downlaod it and try to use winzip to unzip this file but fail. The path is correct and i got the zip file. but it just cannot unzip.
    pls help
    thanks alot.
    Kin
              int count = 0;
              count = ContentDocuments.size();
              for (int i = 0; i < bb; i++)     {
                   System.out.println(filenames[i] + "");
              // Create a buffer for reading the files
              byte[] buf = new byte[10*1024*1024];
              try {      
                   String outFilename = MyDir + "zipfile/" + getContentID2()+".zip";
                   System.out.println("outFilename = " + outFilename);
                   ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
                   for (int i=0; i<filenames.length; i++) {           
                        FileInputStream in = new FileInputStream(filenames);
                        out.putNextEntry(new ZipEntry(filenames[i]));
                        int len;
                        while ((len = in.read(buf)) != -1) {               
                             out.write(buf, 0, len);
                        out.closeEntry();
                        in.close();
                   out.close();
              } catch (IOException e)     {
                   System.err.println("zipprocess " + e.getMessage());

    I've written a replacement zip file creator class. Not much tested but it seems to work, however I've yet to try it with the version of WINZIP that rejected my previous attempts. Oh, and the stored dates are garbage.
    * ZipOutputFile.java
    * Created on 25 March 2004, 13:08
    package zip;
    import java.io.IOException;
    import java.nio.ByteBuffer;
    * <p>Creates a ZIP archive in a file which WINZIP should be able to read.</p>
    * <p>Unfortunately zip archives generated by the standard Java class
    * {@link java.util.zip.ZipOutputStream}, while adhering to PKZIPs format specification,
    * don't appear to be readable by some versions of WinZip and similar utilities. This is
    * probably because they use
    * a format specified for writing to a non-seakable stream, where the length and CRC of
    * a file is writen to a special block following the data. Since the length of the binary
    * date is unknown this makes an archive quite complicated to read, and it looks like
    * WinZip hasn't bothered.</p>
    * <p>All data is Deflated. Close completes the archive, flush terminates the current entry.</p>
    * @see java.util.zip.ZipOutputStream
    * @author  Malcolm McMahon
    public class ZipOutputFile extends java.io.OutputStream {
        byte[] oneByte = new byte[1];
        java.io.RandomAccessFile archive;
        public final static short DEFLATE_METHOD = 8;
        public final static short VERSION_CODE = 20;
        public final static short MIN_VERSION = 10;
        public final static int  ENTRY_HEADER_MAGIC = 0x04034b50;
        public final static int  CATALOG_HEADER_MAGIC = 0x02014b50;
        public final static int  CATALOG_END_MAGIC = 0x06054b50;
        private final static short DISC_NUMBER = 0;
        ByteBuffer entryHeader = ByteBuffer.wrap(new byte[30]);
        ByteBuffer entryLater = ByteBuffer.wrap(new byte[12]);
        java.util.zip.CRC32 crcAcc = new java.util.zip.CRC32();
        java.util.zip.Deflater def = new java.util.zip.Deflater(java.util.zip.Deflater.DEFLATED, true);
        int totalCompressed;
        long MSEPOCH;
        byte [] deflateBuf = new byte[2048];
        public static final long SECONDS_TO_DAYS = 60 * 60 * 24;
         * Entry stores info about each file stored
        private class Entry {
            long offset;        // position of header in file
            byte[] name;
            long crc;
            int compressedSize;
            int uncompressedSize;
            java.util.Date date;
             * Contructor also writes initial header.
             * @param fileName Name under which data is stored.
             * @param date  Date to label the file with
             * @TODO get the date stored properly
            public Entry(String fileName, java.util.Date date) throws IOException {
                name = fileName.getBytes();
                this.date = date == null ? new java.util.Date() : date;
                entryHeader.position(10);
                putDate(entryHeader);
                entryHeader.putShort(26, (short)name.length);
                offset = archive.getFilePointer();
                archive.write(entryHeader.array());
                archive.write(name);
                catalog.add(this);
                crcAcc.reset();
                totalCompressed = 0;
                def.reset();
             * Finish writing entry data. Save the lenghts & crc for catalog
             * and go back and fill them in in the entry header.
            public void close() throws IOException {
                def.finish();
                while(!def.finished())
                    deflate();
                entryLater.position(0);
                crc = crcAcc.getValue();
                compressedSize = totalCompressed;
                uncompressedSize = def.getTotalIn();
                entryLater.putInt((int)crc);
                entryLater.putInt(compressedSize);
                entryLater.putInt(uncompressedSize);
                long eof = archive.getFilePointer();
                archive.seek(offset + 14);
                archive.write(entryLater.array());
                archive.seek(eof);
             * Write the catalog data relevant to this entry. Buffer is
             * preloaded with fixed data.
             * @param buf Buffer to organise fixed lenght part of header
            public void writeCatalog(ByteBuffer buf) throws IOException {
                buf.position(12);
                putDate(buf);
                buf.putInt((int)crc);
                buf.putInt(compressedSize);
                buf.putInt(uncompressedSize);
                buf.putShort((short)name.length);
                buf.putShort((short)0);  // extra field length
                buf.putShort((short)0);  // file comment length
                buf.putShort(DISC_NUMBER);  // disk number
                buf.putShort((short)0); // internal attributes
                buf.putInt(0);      // external file attributes
                buf.putInt((int)offset); // file position
                archive.write(buf.array());
                archive.write(name);
             * This writes the entries date in MSDOS format.
             * @param buf Where to write it
             * @TODO Get this generating sane dates
            public void putDate(ByteBuffer buf) {
                long msTime = (date.getTime() - MSEPOCH) / 1000;
                buf.putShort((short)(msTime % SECONDS_TO_DAYS));
                buf.putShort((short)(msTime / SECONDS_TO_DAYS));
        private Entry entryInProgress = null; // entry currently being written
        private java.util.ArrayList catalog = new java.util.ArrayList(12);  // all entries
         * Start a new output file.
         * @param name The name to store as
         * @param date Date - null indicates current time
        public java.io.OutputStream openEntry(String name, java.util.Date date) throws IOException{
            if(entryInProgress != null)
                entryInProgress.close();
            entryInProgress = new Entry(name, date);
            return this;
         * Creates a new instance of ZipOutputFile
         * @param fd The file to write to
        public ZipOutputFile(java.io.File fd) throws IOException {
            this(new java.io.RandomAccessFile(fd, "rw"));
         * Create new instance of ZipOutputFile from RandomAccessFile
         * @param archive RandomAccessFile
        public ZipOutputFile(java.io.RandomAccessFile archive) {
            this.archive = archive;
            entryHeader.order(java.nio.ByteOrder.LITTLE_ENDIAN);  // create fixed fields of header
            entryLater.order(java.nio.ByteOrder.LITTLE_ENDIAN);
            entryHeader.putInt(ENTRY_HEADER_MAGIC);
            entryHeader.putShort(MIN_VERSION);
            entryHeader.putShort((short)0);  // general purpose flag
            entryHeader.putShort(DEFLATE_METHOD);
            java.util.Calendar cal = java.util.Calendar.getInstance();
            cal.clear();
            cal.set(java.util.Calendar.YEAR, 1950);
            cal.set(java.util.Calendar.DAY_OF_MONTH, 1);
    //        def.setStrategy(Deflater.HUFFMAN_ONLY);
            MSEPOCH = cal.getTimeInMillis();
         * Writes the master catalogue and postamble and closes the archive file.
        public void close() throws IOException{
            if(entryInProgress != null)
                entryInProgress.close();
            ByteBuffer catEntry = ByteBuffer.wrap(new byte[46]);
            catEntry.order(java.nio.ByteOrder.LITTLE_ENDIAN);
            catEntry.putInt(CATALOG_HEADER_MAGIC);
            catEntry.putShort(VERSION_CODE);
            catEntry.putShort(MIN_VERSION);
            catEntry.putShort((short)0);
            catEntry.putShort(DEFLATE_METHOD);
            long catStart = archive.getFilePointer();
            for(java.util.Iterator it = catalog.iterator(); it.hasNext();) {
                ((Entry)it.next()).writeCatalog(catEntry);
            catEntry.position(0);
            catEntry.putInt(CATALOG_END_MAGIC);
            catEntry.putShort(DISC_NUMBER);
            catEntry.putShort(DISC_NUMBER);
            catEntry.putShort((short)catalog.size());
            catEntry.putShort((short)catalog.size());
            catEntry.putInt((int)(archive.getFilePointer() - catStart));
            catEntry.putInt((int)catStart);
            catEntry.putShort((short)0);
            archive.write(catEntry.array(), 0, catEntry.position());
            archive.setLength(archive.getFilePointer());  // truncate if old file
            archive.close();
            def.end();
         * Closes entry in progress.
        public void flush() throws IOException{
            if(entryInProgress == null)
                throw new IllegalStateException("Must call openEntry before writing");
            entryInProgress.close();
            entryInProgress = null;
         * Standard write routine. Defined by {@link java.io.OutputStream}.
         * Can only be used once openEntry has defined the file.
         * @param b  Bytes to write
        public void write(byte[] b) throws IOException{
            if(entryInProgress == null)
                throw new IllegalStateException("Must call openEntry before writing");
            crcAcc.update(b);
            def.setInput(b);
            while(!def.needsInput())
                deflate();
         * Standard write routine. Defined by {@link java.io.OutputStream}.
         * Can only be used once openEntry has defined the file.
         * @param b  Bytes to write
        public void write(int b) throws IOException{
            oneByte[0] = (byte)b;
            crcAcc.update(b);
            write(oneByte, 0, 1);
         *  Standard write routine. Defined by {@link java.io.OutputStream}.
         * Can only be used once openEntry has defined the file.
         * @param b  Bytes to write
         * @param off Start offset
         * @param len Byte count
        public void write(byte[] b, int off, int len) throws IOException{
            if(entryInProgress == null)
                throw new IllegalStateException("Must call openEntry before writing");
            crcAcc.update(b, off, len);
            def.setInput(b, off, len);
            while(!def.needsInput())
                deflate();
        * Gets a buffer full of coded data from the deflater and writes it to archive.
        private void deflate() throws IOException {
            int len = def.deflate(deflateBuf);
            totalCompressed += len;
            if(len > 0)
                archive.write(deflateBuf, 0, len);

  • How to create password protected zip in java?

    I want to create a password protected zip file in java...java.util.zip does not support this...how to do this???
    Someone please help...

    Thanks for Reply"[email protected]"
    Till today whatever i got is this------
    In java there is no way to make a password protected zip...java.util.zip package does not support this thing...
    To do this we require Third party API---
    Two third party Api i got...
    one is "CHILKAT API for java"
    and another one is "IPWORKS"http://www.componentsource.com/products/ipworks-zip-java-desktop/index.html
    but both of these API are paid...
    Even this problem has been reportd as bug in the bug database....
    And the other way is related with Class Process Builder of java...
    If someone knows more about this then tell me...

  • How to zip my java code

    Hi all,
    I am in java JSP development environment. How to distribute my code for reuse my team member, they should not see my code, but they can access my code.
    Some way of jar or zip file sysem in jsp progream
    server tomcat server
    regards,
    TGS

    S/he should put it in JAVA_HOME/jre/lib/ext/Should not! Only classes which are supposed to extend the jre should go there. Third party JARs should be kept at any different location and included in the classpath as and when required.

  • Summit_rewritten_11g_oct_2008.zip : backingBeanClass.java

    hi
    Please consider the application in summit_rewritten_11g_oct_2008.zip, described in redeveloping_forms_in_adf_11g.pdf,
    titled "Case Study: Redeveloping an Oracle Forms application using Oracle JDeveloper 11g and Oracle ADF 11g"
    see http://www.oracle.com/technology/products/jdev/collateral/4gl/papers/summit_rewritten_11g_oct_2008.zip
    and http://www.oracle.com/technology/products/jdev/collateral/4gl/papers/redeveloping_forms_in_adf_11g.pdf
    Its backingBeanClass.java file has this code:
    public class backingBeanClass {
        public backingBeanClass() {
        public String imageButtonPressed() {
            // Add event code here...
            if (getIMAGE_MODE() == "On")
                setIMAGE_MODE("Off");
            else
                setIMAGE_MODE("On");
            System.out.println("The value if IMAGE_MODE is " + getIMAGE_MODE());
            return null;
        private String IMAGE_MODE = "On";
        public void setIMAGE_MODE(String IMAGE_MODE) {
            this.IMAGE_MODE = IMAGE_MODE;
        public String getIMAGE_MODE() {
            return IMAGE_MODE;
    }I would like to point out a few things about naming and comparing, so please consider the same class written like this:
    public class BackingBeanClass {
        private String fImageMode = "On";
        public String imageButtonPressed() {
            if ("On".equals(getImageMode()))
                setImageMode("Off");
            else
                setImageMode("On");
            System.out.println("The value of getImageMode() is " + getImageMode());
            return null;
        public void setImageMode(String pImageMode) {
            fImageMode = pImageMode;
        public String getImageMode() {
            return fImageMode;
    }(1) Typical Java naming conventions use camel case for Class names, starting with an upper case letter. Also all upper case is typically only used for constants. This would also make an expression as "#{sessionScope.ordersManagedBean.IMAGE_MODE == "Off"}" in ordersPage.jspx less confusing about whether a class field member of a class accessor method will be used here. Other changes that could be made are introducing constants (static final) for "On" and "Off".
    note : Using "Refactor" - "Rename..." on "IMAGE_MODE" (and its accessor methods when asked by JDeveloper) does not seem to make the required changes in ordersPage.jspx (see below) and adfc-config.xml (a managed-property).
    (2) An expression like " getIMAGE_MODE() == "On" " does not properly compare String objects, the equals() method should be used. In this example it makes the "image_button" behave properly from the first click.
    Together with the above change, if the intention of this application is to "disclose (e.i. view) the image when the image-mode is On", then these changes should be made in the ordersPage.jspx page.
                  <af:panelBox text="Image" inlineStyle="padding:2mm;"
                               disclosed='#{sessionScope.ordersManagedBean.IMAGE_MODE == "Off"}'
                               partialTriggers="image_button">
                  <!-- ... -->
                  </af:panelBox>changed to this
                  <af:panelBox text="Image" inlineStyle="padding:2mm;"
                               disclosed='#{sessionScope.ordersManagedBean.imageMode == "On"}'
                               partialTriggers="image_button">
                  <!-- ... -->
                  </af:panelBox>and
                  <af:commandToolbarButton text="Image #{ ordersManagedBean.IMAGE_MODE}"
                                           action="#{ordersManagedBean.imageButtonPressed}"
                                           id="image_button"/>changed to this, note the partialTriggers property
                  <af:commandToolbarButton text="Image #{ ordersManagedBean.imageMode}"
                                           action="#{ordersManagedBean.imageButtonPressed}"
                                           id="image_button"
                                           partialTriggers="image_button"/>or maybe even to this, to be more explicit about what the button should do (and to behave as shown in summit11g-image-shown.png and summit11g-image-hidden.png)
                  <af:commandToolbarButton text='#{ordersManagedBean.imageMode == "On" ? "Hide" : "Show"} Image'
                                           action="#{ordersManagedBean.imageButtonPressed}"
                                           id="image_button"
                                           partialTriggers="image_button"/>I tried all this using JDeveloper 11.1.1.0.1 .
    regards
    Jan Vervecken

    Of course, in the meantime if you want to do any tidy up of the code I'm happy to take your changes and add into the zip file. Also happy to take any other suggested changes to the application since it seems to be that you've spent some time reviewing it.
    Feel free to contact me off line (firstname dot lastname at oracle dot com) if you want to follow up on this.
    Regards
    Grant

  • Add file to ZIP in Java program

    Hi all,
    I already found a lot of documentations of how to ZIP files in Java with the java.util.zip package, like: http://java.sun.com/developer/technicalArticles/Programming/compression/
    This algorithm works fine when you always want to create a fresh ZIP file where put your current files in.
    But I have the following problem: I already have a ZIP file with lots of files in it, and I want to add another file to this ZIP! Unfortunately I did not find any solution of how to do this in a java program - any ideas? Is it possible at all?
    Thanks for all answers
    nocomm

    Maybe this will help.
    http://home.mindspring.com/~thornton.rose/articles/ZipJar/part2.html
    At the bottom of this link is a algorithm for updating a file in a JAR that can be used for ZIP.
    It looks to me that the only way to add a new file to a ZIP is to:
    1) Create a Temporary ZIP
    2) Add new file to ZIP
    3) Open old Zip
    4) Read each ZIP Entry in turn and write to temporary ZIP
    5) If all goes well then deleted old ZIP and rename temporary ZIP to the correct filename
    You will have a ZIP with all the old files in and the new file.

  • I know ZIP about Java. Where Do I Learn?

    I know virtually nothing about Java. I have avoided it but now I want to learn and so far everything I have seen is pretty much Greek. I have used FP2003 and Dreamweaver to build web pages but not delved ino the guts of Java. Where do I begin?
    Ionamic

    Here are some excellent resources for you:
    Installation Notes - JDK 5.0 Microsoft Windows (32-bit)
    Your First Cup of Java
    New to Java Center
    The Java� Tutorial - A practical guide for programmers
    The Java� Tutorial - Trail: Learning the Java Language
    Java Programming Notes - Fred Swartz
    How To Think Like A Computer Scientist
    Introduction to Computer Science using Java
    The Java Developers Almanac 1.4
    Object-Oriented Programming Concepts
    Object-oriented language basics
    Don't Fear the OOP
    Books:
    The Java Programming Language - 4th Edition
    Head First Java, by Bert Bates and Kathy Sierra
    Thinking in Java (Free online), by Bruce Eckel
    Core Java, by Cay Horstmann and Gary Cornell
    Effective Java, by Joshua Bloch
    http://java.sun.com/developer/Books/javaprogramming/
    Good luck, and welcome to Java!
    ~

  • How to exclude src.zip with java source files from archive

    Hello All.
    Our team have to prepare our SCs (Sowtware Components) for using outside the company. Meanwhile our source files should be protected. We tried a lot of ways to remove all sources from SCA archives.
    This SC should then be integrated in third-party product.
    Using build options in compartments gives no effect.
    Any ideas?
    Thanks in advance.
    Maxim Maltsev.

    Thanks a lot.
    To make code invisible for customer we should build an assembly with build option "include_sources"=false.
    DCs in such assemblies won't be visible in inactive branch and could be used as non-editable in active branch of track.
    The task is settled - client can modify his own code and use our code only via used DC and their public parts, he is not able to see our code.
    Also customer can not see private sources as he gets assemblies without sources. Remember - public parts of type assembly shouldn't be of Source type.
    Maxim Maltsev.
    Edited by: Maxim Maltsev on Dec 10, 2009 3:53 PM

  • Problem with Java and Zip Files

    Hello there everyone. I have a problem with trying to zip up directories with empty folders in them. They zip fine with my code, but according to winzip, the number of files in the archive is incorrect. It's supposed to have a total of 288 files in it, but when it's zipped up, it only says 284. I mention specifically the "empty directories" note because the zipping works fine without empty folders.
    Below is the code for the zip method:
    public static void zip(File[] list, File zipfile, File zipRoot)
         throws IOException {
          if (!zipfile.exists()) {
                   zipfile.createNewFile();
              else if (!zipfile.isFile()) {
                   throw new IOException("The zip file, " + zipfile.getAbsolutePath()
                             + " is not a file.");
              if (list.length == 0) {
                  LOG.error("The list of files to zip up is empty.");
              for (int i = 0; i < list.length; i++) {
                   if (!list.exists()) {
                        throw new IOException("The file or directory, " + list[i].getAbsolutePath()
                                  + " does not exist.");
              FileOutputStream fos = new FileOutputStream(zipfile);
              ZipOutputStream zos = new ZipOutputStream(fos);
              for (int i = 0; i < list.length; i++) {
                   if (LOG.isDebugEnabled())
                        LOG.debug(i + ": " + list[i].getName());
                   String entryName = getRelativeName(list[i], zipRoot);
                   if (list[i].isDirectory()){
                        if (list[i].listFiles().length == 0){
                             ZipEntry entry = new ZipEntry(entryName + "/");
                             zos.putNextEntry(entry);
                   else {
                        ZipEntry ze = new ZipEntry(entryName);
                        zos.putNextEntry(ze);
                        byte[] buffer = new byte[8096];
                        FileInputStream fis = new FileInputStream(list[i]);
                        int read = 0;
                        read = fis.read(buffer);
                        if (LOG.isDebugEnabled())
                        LOG.debug("\tFound " + read + " bytes.");
                        if (read == -1){
                             //empty file, but add it for preservation.
                             //zos.write(buffer,0,0);
                        while (read != -1) {
                             zos.write(buffer, 0, read);
                             read = fis.read(buffer);
                        fis.close();
                        zos.closeEntry();
              zos.close();
    The files look like they're there, but I need the system to be able to determine the number correctly. 
    Here's the interesting thing:  It zips the files, and then when I use the size() method for zip files in java, it says 284 files.  But when I unzip, it says 288 again.  It's like there's files missing when compressed, but when decompressed, they return.  Note that the files are actually there.  If I open the archive in a third party app such as Winzip AND Winrar AND IZarc, they all show 288 files.  Any idea what would make the number of files appear incorrectly in a zip file when zipped by java with the code above?  Thanks in advance.
    - Chris                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

    I figured out the problem. When zipping files in windows using winzip, it doesn't explicitly count folders as a "file/folder" as a file in itself. It will create the folders for files to go in, but the folder itself will not be 'counted' when you query the info of the file itself. You have more control of the zip file in java, and can count the folder as a file or not.

  • How do I estimate time takes to Zip/Unzip using java.util.zip ?

    If I am compressing files or uncompressing zips using java.util.zip is there a way for me to tell the user how long it should take or for perhaps displaying a progress monitor ?

    For unzip use the ZipInputStream and pass it a CountingInputStream that keeps track ofr the number of bytes read from it (you write this). This CountingInputStream extends fileInputStream and as such can provide you with information about the total number of bytes available to be read and the number already read. This can give a crude idea of how much work has been done and how much work still needs to be done. It is inaccurate but should be good enoough for a progress bar
    As for zipping use the ZipOutputStream and pass it blocks of information. Keep track of the number of blocks you have written and the number you still need to write.
    matfud

  • Java.util.zip.ZipFile.entries() shows only 99 files but zip file is fine.

    Hi,
    I have a wierd issue with java.util.zip.ZipFile
    Code as simple as
    ZipFile file = new ZipFile("my.zip") ;
    System.out.println(file.size());
    For this particular zip file, it says 99 files found but the zip contains more than 60,000 files. I tried the zip with unzip and zip utilities and the zip file checks out fine. I even tried to unzip the contents, and zip 'em up all over again, just to eliminate the chances of corruption while the zip was being transferred over the network.
    The same program works fine with another zip containing more or less the same number of files and prints 63730.
    Any idea? This can not possibly be related to the type of files the zips contain? right? In any case, the contents of both zips are text/xml files.
    Any help would be greatly appreciated.
    Regards,
    ZiroFrequency

    I know its a problem with this particular zip. But whats interesting is that "unzip" can easily open / verify the zip and claims that it is a valid zip.
    As I wrote earlier, I unzipped the file and zipped up the contents again in a new zip but java can't still count the contents correctly.
    So I am thinking there is something to do with the "contents" of the xmls inside the zip? (characterset issues?)
    There are no exceptions thrown and no error anywhere :(
    I basically need to pinpoint the issue so that I can have it corrected upstream as this zip file processing is an ongoing process and I need to resolve it not just once but for the periodic executions.
    Hope this helps explain the issue.

  • Is it possible to zip and use java file in jar?

    there are 2 cases:
    1. only zip no-package java files in a jar file:
    i.e.
    ------------zip
    NoPack0.java (they are no package)
    NoPack1.java
    NoPackN.java
    ------------as NoPack.jar
    2. zip both no-package and packaged java files in a jar file
    i.e.
    ------------zip
    NoPack0.java
    NoPackN.java
    pack\HasPack0.java (they are packed in 'pack')
    pack\HasPackN.java
    ------------as HasPack.jar
    my question is:
    for 2 cases above, if both, one or none of them can be use as a jar file in -classpath for javac compiler?
    thx

    has my Q been answered?

  • Portal errors...java.util.zip.ZipException

    Hi all,
    I don't have any clue how to solve this problem, anybody knows?
    Full Message Text
    java.util.zip.ZipException: Error opening zip file /usr/sap/P11/DVEBMGS11/j2ee/cluster/server0/./log/archive/_log_kernel_cluster_default.trc1301094236029.zip
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:141)
    at java.util.zip.ZipFile.<init>(ZipFile.java:156)
    at com.sapmarkets.bam.jmxadapter.AbstractLog.getArchiveInfo(AbstractLog.java:328)
    at com.sapmarkets.bam.jmxadapter.AbstractLog.getArchives(AbstractLog.java:454)
    at com.sapmarkets.bam.jmxadapter.AbstractLog.getArchives(AbstractLog.java:477)
    at sun.reflect.GeneratedMethodAccessor2304.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:62)
    at java.lang.reflect.Method.invoke(Method.java:391)
    at com.sap.pj.jmx.introspect.DefaultMBeanInvoker.getAttribute(DefaultMBeanInvoker.java:129)
    at javax.management.StandardMBean.getAttribute(StandardMBean.java:229)
    at com.sap.pj.jmx.server.MBeanServerImpl.getAttribute(MBeanServerImpl.java:1296)
    at com.sap.pj.jmx.server.interceptor.MBeanServerWrapperInterceptor.getAttribute(MBeanServerWrapperInterceptor.java:181)
    at com.sap.engine.services.jmx.CompletionInterceptor.getAttribute(CompletionInterceptor.java:309)
    at com.sap.pj.jmx.server.interceptor.BasicMBeanServerInterceptor.getAttribute(BasicMBeanServerInterceptor.java:169)
    at com.sap.jmx.provider.ProviderInterceptor.getAttribute(ProviderInterceptor.java:195)
    at com.sap.engine.services.jmx.RedirectInterceptor.getAttribute(RedirectInterceptor.java:232)
    at com.sap.pj.jmx.server.interceptor.MBeanServerInterceptorChain.getAttribute(MBeanServerInterceptorChain.java:124)
    at com.sap.engine.services.jmx.MBeanServerSecurityWrapper.getAttribute(MBeanServerSecurityWrapper.java:234)
    at com.sap.engine.services.jmx.ClusterInterceptor.getAttribute(ClusterInterceptor.java:522)
    at com.sap.pj.jmx.server.interceptor.MBeanServerInterceptorChain.getAttribute(MBeanServerInterceptorChain.java:124)
    at com.sapmarkets.bam.logcontroller.jmx.LogControllerFacade.getLogInfo(LogControllerFacade.java:227)
    at com.sapmarkets.bam.logcontroller.jmx.LogControllerFacade.getLogInfosWithPattern(LogControllerFacade.java:193)
    at com.sapmarkets.bam.logcontroller.jmx.LogControllerFacade.getLogInfos(LogControllerFacade.java:174)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:61)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
    at java.lang.reflect.Method.invoke(Method.java:391)
    at com.sap.pj.jmx.introspect.DefaultMBeanInvoker.getAttribute(DefaultMBeanInvoker.java:129)
    at javax.management.StandardMBean.getAttribute(StandardMBean.java:229)
    at com.sap.pj.jmx.server.MBeanServerImpl.getAttribute(MBeanServerImpl.java:1296)
    at com.sap.pj.jmx.server.interceptor.MBeanServerWrapperInterceptor.getAttribute(MBeanServerWrapperInterceptor.java:181)
    at com.sap.engine.services.jmx.CompletionInterceptor.getAttribute(CompletionInterceptor.java:309)
    at com.sap.pj.jmx.server.interceptor.BasicMBeanServerInterceptor.getAttribute(BasicMBeanServerInterceptor.java:169)
    at com.sap.jmx.provider.ProviderInterceptor.getAttribute(ProviderInterceptor.java:195)
    at com.sap.engine.services.jmx.RedirectInterceptor.getAttribute(RedirectInterceptor.java:232)
    at com.sap.pj.jmx.server.interceptor.MBeanServerInterceptorChain.getAttribute(MBeanServerInterceptorChain.java:124)
    at com.sap.engine.services.jmx.MBeanServerSecurityWrapper.getAttribute(MBeanServerSecurityWrapper.java:234)
    at com.sap.engine.services.jmx.ClusterInterceptor.getAttribute(ClusterInterceptor.java:522)
    at com.sap.pj.jmx.server.interceptor.MBeanServerInterceptorChain.getAttribute(MBeanServerInterceptorChain.java:124)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:61)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
    at java.lang.reflect.Method.invoke(Method.java:391)
    at com.sap.tc.logviewer.mbean.LocalLVMBeanServer.invoke(LocalLVMBeanServer.java:73)
    at $Proxy334.getAttribute(Unknown Source)
    at com.sapmarkets.bam.application.logdepot.AbstractLogDepot.getAttribute(AbstractLogDepot.java:236)
    at com.sapmarkets.bam.application.logdepot.AbstractLogDepot.getLogDescriptors(AbstractLogDepot.java:84)
    at com.sap.tc.logviewer.mbean.ServerModelLogDepot.getLogDescriptors(ServerModelLogDepot.java:79)
    at com.sap.tc.logviewer.mbean.ServerModelLogDepotGroup$GetLogDescriptorsTask.run(ServerModelLogDepotGroup.java:60)
    at com.sap.tc.logviewer.mbean.ServerModelLogDepotGroup.execute(ServerModelLogDepotGroup.java:173)
    at com.sap.tc.logviewer.mbean.ServerModelLogDepotGroup.getLogDescriptors(ServerModelLogDepotGroup.java:119)
    at com.sap.tc.logviewer.mbean.LogviewerServer.getLogs(LogviewerServer.java:137)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:88)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:61)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:60)
    at java.lang.reflect.Method.invoke(Method.java:391)
    at com.sap.pj.jmx.introspect.DefaultMBeanInvoker.invoke(DefaultMBeanInvoker.java:58)
    at javax.management.StandardMBean.invoke(StandardMBean.java:286)
    at com.sap.pj.jmx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:944)
    at com.sap.pj.jmx.server.interceptor.MBeanServerWrapperInterceptor.invoke(MBeanServerWrapperInterceptor.java:288)
    at com.sap.engine.services.jmx.CompletionInterceptor.invoke(CompletionInterceptor.java:409)
    at com.sap.pj.jmx.server.interceptor.BasicMBeanServerInterceptor.invoke(BasicMBeanServerInterceptor.java:277)
    at com.sap.jmx.provider.ProviderInterceptor.invoke(ProviderInterceptor.java:258)
    at com.sap.engine.services.jmx.RedirectInterceptor.invoke(RedirectInterceptor.java:340)
    at com.sap.pj.jmx.server.interceptor.MBeanServerInterceptorChain.invoke(MBeanServerInterceptorChain.java:330)
    at com.sap.engine.services.jmx.MBeanServerSecurityWrapper.invoke(MBeanServerSecurityWrapper.java:287)
    at com.sap.engine.services.jmx.ClusterInterceptor.invoke(ClusterInterceptor.java:776)
    at com.sap.pj.jmx.server.interceptor.MBeanServerInterceptorChain.invoke(MBeanServerInterceptorChain.java:330)
    at com.sap.tc.logviewer.client.j2ee.J2EELogviewerServerInvoker.invoke(J2EELogviewerServerInvoker.java:111)
    at com.sap.tc.logviewer.client.j2ee.J2EELogviewerServerProxy.getLogs(J2EELogviewerServerProxy.java:105)
    at com.sap.tc.logviewer.client.base.LogviewerClientImpl$GetLogs.run(LogviewerClientImpl.java:442)
    at java.lang.Thread.run(Thread.java:770)

    I am facing the same problem in portal. Whenever I try to click the (F4) button in record working time it goes to infinite loop and it generates the error messge in log. Can you please inform me what have you done to solve this issue.

  • Java.util.zip closeEntry on zip of JAI images

    At 7/27/01 10:01 AM, ericdev wrote:
    Hi,
    I am trying to unzip a file of images to be later processed by JAI. When
    I Do a CloseEntry() method on a zip Entry it throws this exception. Any
    ideas? Are the files too big? I would think that java can handle any size
    zip file.
    java.io.IOException: Push back buffer is full
    at java.io.PushbackInputStream.unread(PushbackInputStream.java:207)
    at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:341)
    at java.util.zip.ZipInputStream.read(ZipInputStream.java:144)
    at java.util.zip.ZipInputStream.closeEntry(ZipInputStream.java:93)
    at Zip.decompressToVector(Zip.java:155)
    at uploadFile.doPost(uploadFile.java:105)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:404)
    at org.apache.tomcat.core.Handler.service(Handler.java:286)
    at org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372
    Eric Dunn
    [email protected]
    Software Engineer
    ZBE, Incorporated

    I can't help you directly - never seen this error before. However I can tell you that I have used zip format for transmission across the network, writing enormous zip streams as output and reading (and unzipping) them as input.
    (Enormous means individual files of 30 megs)

Maybe you are looking for

  • Unable to install Adobe Flash Player in iMAC with OS X10.7.2 Any suggestions?

    Unable to install Adobe Flash Player iniMAC with OS X 10.7.2 Lion. Any suggestions?

  • Is it possible to make a hierarchy of application ...

    I can add a new folder to the root folder but it doesn't seem possible to move an application folder to the new folder. One can only move applications to the new folder. What I want to do is to create a folder in the Main/Root menu called something l

  • IWeb Ftp Publishing issues

    Hi all hope someone out there has an answer for my dilema. Have a site xxxx.ca and i have created a site on Iweb for this and called it xxxx.ca Now here comes my problem I use the FTP in Iweb with these settings Site Name: xxxx.ca my email Server Add

  • Why do I get a error stating units is undefined ?

    Why am I getting this error message?      The unit "Bar Delta-P" of the channel "[1]/IPT_Cylinder_1" is unknown.      Define a new unit or a unit alias. Solved! Go to Solution. Attachments: New WinZip File.zip ‏27 KB

  • Video not working in group chat

    I am running Windows on my laptop and can do a video call to a friend in Dubai who has a Samsumg mobile.  Video 1:1 works fine.  However, when I try to add another person who has an Ipad 2 or Iphone 5, the video group calling won't work, including th