Java.util.zip: how to save file type

HI,
I have a written a program that zips PDF files and sends them as an attachment via email. This have been running daily for the last 1.5 years with no problems. Recently, some email providers have been striping the attachments or refusing the email, because I have used two file suffix on the attachment, e.g report.pdf.zip. I did this so that when the file is unzipped the .pdf extension remains and file is recognised, otherwise the document is treated as plain text or unknown format. How can I include the filetype in the zipped file, so that I can have report.pdf become report.zip, then when the user unzips the file has report.zip become report.pdf. I know the filetype is stored in the zip header, but I don't know how to do this using java.util.zip. Any help would be appreciated.
Mike

You see, zip files are inherently dumb. They don't "actually" have a file system in the strictest sense. The zip file format merely associates a String ID with some bytes. It's all on the client side where the magic happens. if I have three zip entries in a file, these are the entry names.
1.) somedir/myfile.txt
2.) someotherdir/myfile.txt
3.) README
when a client "unzipper" see these names, it realizes that "/" is a directory separator, so it makes the appropriate directories and places the bytes into files of that given name.
So all you should have to do is make the zip entry with a name that ends in .pdf The client should do the rest.

Similar Messages

  • Java.util.zip ZipException Error Opening File

    I have code that uploads a file in my strut then i change its extension to .zip and want to extract that file.
    (please note that the file is create under zip and renamed as .xtr before upload, when user uploads it we change its name to zip. I am telling here so that u can see there s nothing wrong with the file. Soem how, I can also extract it from windows. )
    when my code runs, and it tried to read entries in the enumeration, it says "error opening file". I am not posting the code because, I hve used many examples and it has nothing to do with the code.
    My problem is as i mentioned above, my files` name is changed may be its handler doesnt quiet. more over i hve tried the code with upload a zip file. After upload it says the same.
    Can any one provide me a clue to move around ??

    when my code runs, and it tried to read entries in
    the enumeration, it says "error opening file". I am
    not posting the code because, I hve used many
    examples and it has nothing to do with the code. Then I would suggest you fix your code to tell you what the error is. Printing the stack trace would be a good start.

  • Java.util.zip.ZipException while ejb clustering

              Hi,
              Trying to do some Clustering with 2 weblogic servers version 5.1
              (sp8)
              No Problem when the servers individually started up, but when one is started whilst
              the other is already running, I get the following error.
              any clues what is going on? Seems to be something wrong with
              the (generated) jar files under clusterName/ServerName/tmp-
              deployments on the other machine. I tried already deleting
              them, but still no hope!
              Is there anyone to help me???
              Thanx in advance,
              Kishore
              Tue Jul 10 17:45:32 BST 2001:<I> <WebLogicServer> WebLogic Server started
              java.util.zip.ZipException: No such file or directory
              at java.util.zip.ZipFile.open(Native Method)
              at java.util.zip.ZipFile.<init>(ZipFile.java:110)
              at java.util.zip.ZipFile.<init>(ZipFile.java:125)
              at weblogic.boot.ServerClassLoader.deploy
              (ServerClassLoader.java:142) at
              weblogic.cluster.AnnotatedServiceOffer.expandClassPath
              (AnnotatedServiceOffer.java:74)
              at weblogic.cluster.AnnotatedServiceOffer.readObject(AnnotatedServiceOffer.java:62
              at weblogic.common.internal.WLObjectInputStreamBase.readPublicSerializable(WLObjectInputStreamBase.java:265)
              at weblogic.common.internal.WLObjectInputStreamBase.readLeftover(WLObjectInputStreamBase.java:254)
              at weblogic.common.internal.WLObjectInputStreamBase.readObjectBody(WLObjectInputStreamBase.java:195)
              at weblogic.common.internal.WLObjectInputStreamBase.readObject(WLObjectInputStreamBase.java:949)
              at weblogic.common.internal.WLObjectInputStreamBase.readObjectWL(WLObjectInputStreamBase.java:308)
              at weblogic.common.internal.WLObjectInputStreamBase.readArrayList(WLObjectInputStreamBase.java:480)
              at weblogic.cluster.Announcement.readObject(Announcement.java:73)
              at weblogic.common.internal.WLObjectInputStreamBase.readPublicSerializable(WLObjectInputStreamBase.java:265)
              at weblogic.common.internal.WLObjectInputStreamBase.readLeftover(WLObjectInputStreamBase.java:254)
              at weblogic.common.internal.WLObjectInputStreamBase.readObjectBody(WLObjectInputStreamBase.java:195)
              at weblogic.common.internal.WLObjectInputStreamBase.readObject(WLObjectInputStreamBase.java:949)
              at weblogic.common.internal.WLObjectInputStreamBase.readObjectWL(WLObjectInputStreamBase.java:308)
              at weblogic.cluster.TMSocket.execute(TMSocket.java:235)
              at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              Tue Jul 10 17:45:33 BST 2001:<E> <MulticastSocket> Multicast socket receive error:
              java.lang.RuntimeException: I/O error opening JAR file from file:/opt/weblogic/mycluster/server1/
              tmp_deployments/ejbjar29814.jar
              

              Make sure that the directory paths are identical for the different instances in
              the cluster.
              Mike
              "kishore kumar" <[email protected]> wrote:
              >
              >Hi,
              >Trying to do some Clustering with 2 weblogic servers version 5.1
              >(sp8)
              >
              >No Problem when the servers individually started up, but when one is
              >started whilst
              >the other is already running, I get the following error.
              >
              >any clues what is going on? Seems to be something wrong with
              >the (generated) jar files under clusterName/ServerName/tmp-
              >deployments on the other machine. I tried already deleting
              >them, but still no hope!
              >
              >Is there anyone to help me???
              >
              >Thanx in advance,
              >Kishore
              >
              >Tue Jul 10 17:45:32 BST 2001:<I> <WebLogicServer> WebLogic Server started
              >java.util.zip.ZipException: No such file or directory
              > at java.util.zip.ZipFile.open(Native Method)
              > at java.util.zip.ZipFile.<init>(ZipFile.java:110)
              > at java.util.zip.ZipFile.<init>(ZipFile.java:125)
              > at weblogic.boot.ServerClassLoader.deploy
              >(ServerClassLoader.java:142) at
              >weblogic.cluster.AnnotatedServiceOffer.expandClassPath
              >(AnnotatedServiceOffer.java:74)
              > at weblogic.cluster.AnnotatedServiceOffer.readObject(AnnotatedServiceOffer.java:62
              >)
              > at weblogic.common.internal.WLObjectInputStreamBase.readPublicSerializable(WLObjectInputStreamBase.java:265)
              > at weblogic.common.internal.WLObjectInputStreamBase.readLeftover(WLObjectInputStreamBase.java:254)
              > at weblogic.common.internal.WLObjectInputStreamBase.readObjectBody(WLObjectInputStreamBase.java:195)
              > at weblogic.common.internal.WLObjectInputStreamBase.readObject(WLObjectInputStreamBase.java:949)
              > at weblogic.common.internal.WLObjectInputStreamBase.readObjectWL(WLObjectInputStreamBase.java:308)
              > at weblogic.common.internal.WLObjectInputStreamBase.readArrayList(WLObjectInputStreamBase.java:480)
              > at weblogic.cluster.Announcement.readObject(Announcement.java:73)
              > at weblogic.common.internal.WLObjectInputStreamBase.readPublicSerializable(WLObjectInputStreamBase.java:265)
              > at weblogic.common.internal.WLObjectInputStreamBase.readLeftover(WLObjectInputStreamBase.java:254)
              > at weblogic.common.internal.WLObjectInputStreamBase.readObjectBody(WLObjectInputStreamBase.java:195)
              > at weblogic.common.internal.WLObjectInputStreamBase.readObject(WLObjectInputStreamBase.java:949)
              > at weblogic.common.internal.WLObjectInputStreamBase.readObjectWL(WLObjectInputStreamBase.java:308)
              > at weblogic.cluster.TMSocket.execute(TMSocket.java:235)
              > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)
              >Tue Jul 10 17:45:33 BST 2001:<E> <MulticastSocket> Multicast socket receive
              >error:
              >java.lang.RuntimeException: I/O error opening JAR file from file:/opt/weblogic/mycluster/server1/
              >tmp_deployments/ejbjar29814.jar
              >
              >
              

  • How to zip one file i have on disk with java.util.zip

    I don't know how to zip a file. I managed to do new html file, but i don't know how to zip it.
    This is my code:
    PrintWriter pw = new PrintWriter (new FileWriter(export), true);
    Thanks!

    heres a zipper class i wrote which i have butchered a bit to make more generic (its basic and at present only takes one zipentry etc, but very simple and should be easy to extend etc) Just pass it your file in its constructor and then call its zipme method. PS if it can be made better let me know so i can update my class, cheers.
    import java.io.*;
    import java.util.zip.*;
    import java.awt.*;
    class zipper
         public File file;
         public zipper(File f)
              file = new File(f);
         public void zipme()
              try
                   FileInputStream fin = new FileInputStream(file);
                   int a = (int)file.length();
                   byte b[] = new byte[a];
                   fin.read(b);
                   ZipEntry k = new ZipEntry(fin.getName());//represents a single file in a zip archive!
                   File newFile = new File("D:\\AZipFile.zip");
                   ZipOutputStream zi = new ZipOutputStream(new FileOutputStream(newFile));
                   zi.putNextEntry(k);
                   zi.write(b,0,a);
                   zi.close();
                   fin.close();
              catch(FileNotFoundException e)
                   //System.out.println("ERROR File not found");
              catch(IOException ee)
                   //System.out.println("ERROR IO exception in Zipping file");
    }

  • How do I compress a string with  java.util.zip - not a file ?

    How do I compress a string with java.util.zip?
    Is possible to compress something else except a file?

    Of course, compression works on bytes, not some higher level constructs like Strings or files.
    You can use the ZipOutputStream or DeflaterOutputStream for compression.
    And the javadoc for Deflater even has a code example of compressing a String.
    Edited by: Kayaman on May 22, 2011 5:04 PM

  • OC4J startup failed: java.util.zip.ZipException: error in opening zip file

    I am getting the following error. Can someone help me on how to fix this issue?
    Thanks
    E:\oracle\product\oas\10.1.3.1\j2ee\home>java -jar oc4j.jar
    OC4J startup failed
    org.xml.sax.SAXException: META-INF/boot.xml in E:\oracle\product\oas\10.1.3.1\j2
    ee\home\oc4j.jar, line 466: Could not process 'external-classes' for /E:/oracle/
    product/oas/10.1.3.1/j2ee/home/lib/oc4j-internal.jar (from <code-source> in META
    -INF/boot.xml in E:\oracle\product\oas\10.1.3.1\j2ee\home\oc4j.jar): caught java
    .util.zip.ZipException: error in opening zip file.
    at oracle.classloader.util.XMLConfiguration.fail(XMLConfiguration.java:1
    279)
    at oracle.classloader.util.XMLConfiguration.registerExternalsFromPackage
    Names(XMLConfiguration.java:833)
    at oracle.classloader.util.XMLConfiguration.registerExternalsForPostProc
    essing(XMLConfiguration.java:842)
    at oracle.classloader.util.XMLConfiguration.endElement(XMLConfiguration.
    java:716)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endEleme
    nt(AbstractSAXParser.java:633)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
    l.scanEndElement(XMLDocumentFragmentScannerImpl.java:1241)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
    l$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImp
    l.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
    ML11Configuration.java:834)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(X
    ML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
    java:148)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Ab
    stractSAXParser.java:1242)
    at oracle.classloader.util.XMLConfiguration.configureLoaders(XMLConfigur
    ation.java:277)
    at oracle.classloader.util.InitialLoadersFactory.populateLoaders(Initial
    LoadersFactory.java:389)
    at oracle.classloader.util.InitialLoadersFactory.initLoaders(InitialLoad
    ersFactory.java:230)
    at oracle.classloader.util.InitialLoadersFactory.create(InitialLoadersFa
    ctory.java:167)
    at oracle.oc4j.loader.boot.BootStrap.main(BootStrap.java:26)

    Sorry for the delay, i can't attach it so i'll just post it
    User:
    Logname: root
    Monday February 23 14:29:15 GMT 2009
    smpatch settings:
    smpatch analyze:
    Entitlement:
    Sun UC patch revision:
    112945-03
    Solaris release:
    Solaris 9 s9_58shwpl3 SPARC
    Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
    Use is subject to license terms.
    Assembled 15 April 2002
    Solaris Kernel: Generic_112233-05
    Machine Type: sun4u
    Platform: SUNW,Sun-Fire
    Java -version:
    Unrecognized option: -version:1.5+
    Could not create the Java virtual machine.
    Software Cluster:
    CLUSTER=SUNWCXall
    All ccr properties:
    Sun UC package status:
    SUNWbreg not installed
    SUNWccccr not installed
    SUNWccccrr not installed
    SUNWccsign not installed
    SUNWcsmauth not installed
    SUNWppro-plugin-sunos-base not installed
    SUNWppror not installed
    SUNWpprou not installed
    SUNWupdatemgrr not installed
    SUNWupdatemgru not installed

  • 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

  • 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);

  • 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.

  • Java.util.zip.ZipException: Too many open files on Linux

    Hi,
    We have web application running on Caucho's resin server on jdk 1.5.0_11 and Red hat Linux. We are noticing that java process is running out of file handles within 24-30 hours. We have file limit of 5000 which it consumes in 24 hours throwing 'java.util.zip.ZipException: Too many open files'.
    I have made sure all sorts of file handles are closed from application point of view. Here is the snapshot of lsof (list of file handles) from java process. The following list keeps growing until it runs out of limit. Do you have tips/suggestions on how to mitigate this problem (considering we dont want to increase ulimit for this process)? Also, can you make out any thing more from the description of file handles like, are they unclosed POP3 connections or URL connection to external sites?
    java 7156 resin 120u IPv4 34930051 UDP localhost.localdomain:59693
    java 7156 resin 121u IPv4 34927823 UDP localhost.localdomain:59663
    java 7156 resin 122u IPv4 34931861 UDP localhost.localdomain:59739
    java 7156 resin 123u IPv4 34932023 UDP localhost.localdomain:59745
    java 7156 resin 124u IPv4 34930054 UDP localhost.localdomain:59700
    java 7156 resin 125u IPv4 34927826 UDP localhost.localdomain:59665
    java 7156 resin 126u IPv4 34927829 UDP localhost.localdomain:59666
    java 7156 resin 127u IPv4 34930057 UDP localhost.localdomain:59703
    java 7156 resin 128u IPv4 34930713 UDP localhost.localdomain:59727
    java 7156 resin 129u IPv4 34930716 UDP localhost.localdomain:59730
    java 7156 resin 130u IPv4 34932238 UDP localhost.localdomain:59789
    java 7156 resin 131u IPv4 34932026 UDP localhost.localdomain:59749
    java 7156 resin 132u IPv4 34932221 UDP localhost.localdomain:59770
    java 7156 resin 133u IPv4 34932224 UDP localhost.localdomain:59775
    java 7156 resin 134u IPv4 34932029 UDP localhost.localdomain:59753
    java 7156 resin 135u IPv4 34932032 UDP localhost.localdomain:59754
    java 7156 resin 138u IPv4 34932035 UDP localhost.localdomain:59760
    java 7156 resin 139u IPv4 34932038 UDP localhost.localdomain:59763
    java 7156 resin 140u IPv4 34932227 UDP localhost.localdomain:59780
    java 7156 resin 141u IPv4 34932230 UDP localhost.localdomain:59781
    java 7156 resin 144u IPv4 34932234 UDP localhost.localdomain:59786
    java 7156 resin 146u IPv4 34932241 UDP localhost.localdomain:59792
    java 7156 resin 147u IPv4 34932247 UDP localhost.localdomain:59802

    Finally we resolved this issue. It was oracle driver which had some compatibility issue, we upgraded our Oracle client driver to newer version, and this fixed the problem. Base line, there was nothing wrong with application code, code was doing good resource clean up, but oracle driver was leaking handles per every connection.

  • Java.util.zip.ZipException: invalid block type: thrown by adapter-OIM 11g

    Hello Everyone,
    I have deployed an adapter for provisioning to my custom resource and I am calling the code from a process task in the adapter factory.
    The jar for my adapter is place in OIM_HOME/server/JavaTasks .
    Inside the code there is a need to read a configuration xml file which is then parsed using org.apache.commons.digester.Digester parser
    The xml file is present in the src folder.
    The code looks like below:
    URL myURL = MyPlugIn.class.getResource("/com/orgname/appname/xyz.xml");
    InputStream configFileAsStream = myURL.openStream();
    macManager = (MachineManager)digester.parse(configFileAsStream);
    This code works fine when I run it on my local machine, but when I deploy it in OIM I get the following exception:
    java.util.zip.ZipException: invalid block type
         at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:147)
         at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:105)
         at java.io.FilterInputStream.read(FilterInputStream.java:66)
         at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:377)
         at oracle.xml.parser.v2.XMLReader.pushXMLReader(XMLReader.java:240)
         at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:222)
         at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:173)
         at org.apache.commons.digester.Digester.parse(Digester.java:1765)
    Any ideas on why I am getting this exception?
    Is there any other way of going about reading files in adapter code? I have tried reading files by specifying absolute as well as relative paths in OIM but was unable to read them in the adapter code. Any pointers will be of great help.. Thanks!
    Saiesh/-

    Hi,
    Upload if any dependency jar files into database using upload utility as Third Party jar files.
    Regards,
    Raghav

  • Java.util.zip.ZipException error in opening zip file

    Hello all,
    We are using Sun Java System web server 6.1 SP2. When I tried to deploy an application, I received this message: "Posted content length of --- exceeds limit of --- " the -dashes are the size of the file actually.
    I then added an init-param to the web.xml specifying the maximum size.
    After doing that, I tried to deploy the war file using administration interface, but received a network tcp/ip error. I then deployed it using command line wdeploy command. It worked but the web server won't start up after the deployment. The following error messages are found in the log file. Any thoughts as to whats wrong here? Is there a bug in SP2?
    [22/Sep/2006:17:30:44] finer ( 5668): ContextConfig[search]: URI='/search', ResourcePath='/WEB-INF/sun-web-search.tld' [22/Sep/2006:17:30:44] finer ( 5668): ContextConfig[search]:
    tldConfigJar(/WEB-INF/sun-web-search.tld): java.util.zip.ZipException: error in opening zip file
    [22/Sep/2006:17:30:44] finer ( 5668): ContextConfig[search]: URI='/jstl-fmt', ResourcePath='/WEB-INF/fmt.tld' [22/Sep/2006:17:30:44] finer ( 5668): ContextConfig[search]: tldConfigJar(/WEB-INF/fmt.tld): java.util.zip.ZipException: error in opening zip file
    [22/Sep/2006:17:30:48] failure ( 5668): CORE4007: Internal error: Unexpected Java exception thrown (java.lang.NoClassDefFoundError: org/xml/sax/ext/Attributes2, org/xml/sax/ext/Attributes2), stack: java.lang.NoClassDefFoundError: org/xml/sax/ext/Attributes2 at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:537) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:123) at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1717) at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:983) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1431) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1301) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at org.apache.xerces.parsers.AbstractSAXParser.<init>(Unknown Source) at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source) at org.apache.xerces.parsers.SAXParser.<init>(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.<init>(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source) at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParser(Unknown Source) at org.apache.catalina.util.xml.XmlMapper.readXml(XmlMapper.java:274) at org.apache.catalina.startup.ContextConfig.defaultConfig(ContextConfig.java:882) at org.apache.catalina.startup.ContextConfig.start(ContextConfig.java:1004) at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:257) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:155) at org.apache.catalina.core.StandardContext.start(StandardContext.java:3752) at com.iplanet.ias.web.WebModule.start(WebModule.java:257) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1133) at org.apache.catalina.core.StandardHost.start(StandardHost.java:652) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1133) at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:355) at org.apache.catalina.startup.Embedded.start(Embedded.java:995) at com.iplanet.ias.web.WebContainer.start(WebContainer.java:431) at com.iplanet.ias.web.WebContainer.startInstance(WebContainer.java:500) at com.iplanet.ias.server.J2EERunner.confPostInit(J2EERunner.java:161) [22/Sep/2006:17:30:48] failure ( 5668): CORE3186: Failed to set configuration

    ooks like you are running into bug: 4719677
    When you deploy a web application using the Administration Server from a
    remote machine, the maximum upload size by default is 10 MB. This can be
    changed by editing the
    install-root/bin/https/webapps/instance-app/WEB-INF/web.xml file. In the
    servlet webappdeploy, insert an init param named maxUploadSize with a
    value in bytes specifying the maximum upload size. Example:
    <init-param>
    <param-name>maxUploadSize</param-name>
    <param-value>90000000</param-value>
    </init-param>

  • Java.util.zip.ZipException: error in opening zip file Deploment Error

    Hi All,
    I am getting the fallowing Deployment exception while i am trying to deploy my webdynpro DC. Kindly help me if anybody know the solution for it.
    deployment aborted : file:/C:/DOCUME1/291123/LOCALS1/Temp/temp7081pg.comiprscipr~dc_intreg_process.ear
    Aborted: development component 'ipr/scipr/dc_intreg_process'/'pg.com'/'GGD_EPREGDEV_D'/'20101220152524'/'0':Caught exception during application deployment from SAP J2EE Engine's deploy service:java.rmi.RemoteException: Error while getting the internal libraries of application pg.com/iprsciprdc_intreg_process in operation update.. Reason: error in opening zip file; nested exception is:      java.util.zip.ZipException: error in opening zip file (message ID: com.sap.sdm.serverext.servertype.i
    Thanks,
    Mahesh Nuli.

    Hello Ram,
    It is saying that the library file is missing. Can you deploy pg.com/iprsciprdc_intreg_process  first and try to deploy this ear temp7081pg.comiprscipr~dc_intreg_process.ear.
    Regards
    Nizamudeen SM

  • Java.lang.Error: java.util.zip.ZipException: The system cannot find the fil

    I got maven 221 installed
    i got jdk 1.6 and 1.5 installed (have tested both)
    I have a strange error. All my co-workers can build but I cant. The only thing I can find is that I dont have installed BEA Weblogic but I dont want to have that installed. It should be able to run anyway.
    Could someone tell me what is wrong? If you need pom.xml I got that one as well.
    process-classes:
    [copy] Copying 4 files to C:\hudson\jobs\albpm_ip-identity-asserter_-_Build\workspace\target\mbean-content
    [mkdir] Created dir: C:\hudson\jobs\albpm_ip-identity-asserter_-_Build\workspace\target\mbean-jar
    [java] Creating an MJF from the contents of directory C:\hudson\jobs\albpm_ip-identity-asserter_-_Build\workspace\target\mbean-content...
    [java] Compiling the files...
    [java] Creating the list.
    [java] Doing the compile.
    [java] WLMaker-SubProcess: : Exception in thread "main" java.lang.Error: java.util.zip.ZipException: The system cannot find the file specified
    [java] WLMaker-SubProcess: :      at weblogic.management.commo.BeanGenDriver.getManagementTempDir(BeanGenDriver.java:93)
    [java] WLMaker-SubProcess: :      at weblogic.management.commo.BeanGenDriver.main(BeanGenDriver.java:117)
    [java] WLMaker-SubProcess: : Caused by: java.util.zip.ZipException: The system cannot find the file specified
    [java] WLMaker-SubProcess: :      at java.util.zip.ZipFile.open(Native Method)
    [java] WLMaker-SubProcess: :      at java.util.zip.ZipFile.<init>(ZipFile.java:203)
    [java] WLMaker-SubProcess: :      at java.util.jar.JarFile.<init>(JarFile.java:132)
    [java] WLMaker-SubProcess: :      at java.util.jar.JarFile.<init>(JarFile.java:97)
    [java] WLMaker-SubProcess: :      at weblogic.management.commo.BeanGenDriver.getManagementTempDir(BeanGenDriver.java:90)
    [java] WLMaker-SubProcess: :      ... 1 more
    [java] WLMaker-SubProcess: : Stopped draining WLMaker-SubProcess:
    [java] WLMaker-SubProcess: : Stopped draining WLMaker-SubProcess:
    [java] BeanGen code generation failed
    [HUDSON] Archiving C:\hudson\jobs\albpm_ip-identity-asserter_-Build\workspace\pom.xml to C:\hudson\jobs\albpmip-identity-asserter_-Build\modules\dk.skat.ip.integration.albpm$ip-identity-asserter\builds\2010-11-2213-41-28\archive\dk.skat.ip.integration.albpm\ip-identity-asserter\1.2\pom.xml
    [INFO] ------------------------------------------------------------------------

    from my experience, using weblogic jars can be a pain if the full install is not on the local box.
    Note that you dont have to 'install' it. Just copy the directory.
    Reason is that the jar files have manifests with relative classpaths.
    For an example of horror take a look at the weblogic.jar MANIFEST's classpath entry.
    -Fred

  • Where is "save as" or how to change file type in Preview in Lion?

    Where is "save as" or how to change file type in Preview in Lion? I used to use Preview to change quickly change a lot of PNGs to either JPEGs or PDFs but with the introduction of versions auto save etc there no "save as" in the File menu. Any suggestions how to get this functionality back or how to get around it within OS X (no Photoshop etc)?

    Just wasted 15 minutes looking for that.  What's wrong with Save As?

Maybe you are looking for

  • "Payment Order Only" In APP

    Hi Frends, when we are configuring the APP,there will be one filed Called "PAYMENT ORDER ONLY" ,what is the purpose of the filed?

  • Looking For A Cord

    Hello, I recently got my first iPhone and an Otter Box to protect it. I also have an iPod Touch that I would dock with a JBL On Stage to listen to music. The The male connector on the On Stage isn't long enough for my iPhone w/the Otter Box attached.

  • Language setting

    Hi, I'm using english as the main system language, but I'd like to create iWeb pages in german. There is some text I can't change or at least have them changed overtime I create a new site. Those are e.g. "subscribe", "Play Slideshow" etc. How can I

  • Cannot modify an authorization object in pfcg role for a business role

    Hi Experts, I have created two z pfcg roles from the standard business role CRM_UIU_SRV_PROFESSIONAL  lets say by names zagent and zmanager. My requirement is actually to map these two pfcg roles two a service professional agent and service professio

  • Any suggestions to update the documet flow..

    Iam creating a debit bemo request using a BAPI using billing document number. This debit memo request is updated in VBAK table. However this does not update the VBFA table and it does not show any document floe. Any suggestions why BAPI is not updati