-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
6
-
sparc
-
solaris_9
FULL PRODUCT VERSION :
java version "1.6.0-rc"
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0-rc-b104, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
SunOS 5.9 Generic_117171-11 sun4u sparc SUNW,Ultra-Enterprise
Linux 2.4.26-openmosix1mt2 #1 Mon Apr 18 15:32:52 MDT 2005 i686 i686 i386 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
When trying to set the uncompressed size it does not save correctly.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Just replace the file to zip up with your own file and redirect the output to your own directory. When I take the test zip file and run zcat on it this is what I get for the header information.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Using file: /u/ramihu/test
Open /u/ramihu/sumTxt and zip it up...
Created the ZipEntry...
ZIP ENTRY SIZE: 2322595
File /u/ramihu/sumTxt zipped up and ready for read...
Attempting to get the uncompressed zip size: 2322595
Done using ZipInputStream for Information about the Zip entry. Trying ZipFile instead...
Using /u/ramihu/test for test.
Using a ZipEntry initialized through ZipFile.getName: /u/ramihu/sumTxt
Entry Size is: 2322595
ACTUAL -
Using file: /u/ramihu/test
Open /u/ramihu/sumTxt and zip it up...
Created the ZipEntry...
ZIP ENTRY SIZE: 2322595
File /u/ramihu/sumTxt zipped up and ready for read...
Attempting to get the uncompressed zip size: -1
Done using ZipInputStream for Information about the Zip entry. Trying ZipFile instead...
Using /u/ramihu/test for test.
Using a ZipEntry initialized through ZipFile.getName: /u/ramihu/sumTxt
Entry Size is: 2322595
******************* FROM THE COMMAND LINE ************************
telinux9{ramihu}38> file test
test: Zip archive data, at least v2.0 to extract
telinux9{ramihu}39> zcat -l test
compressed uncompressed ratio uncompressed_name
387872 -1 0.0% test
telinux9{ramihu}40>
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package javatests;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
byte[] buf = new byte[1024*8];
try {
File zipOut = new File( "/u/ramihu/test" );
// File zipOut = new File( "/u/summary/DEVL/sums/BDB/8Q/4B/11UNH" );
System.out.println( "Using file: " + zipOut.toString() );
File sourceFile = new File( "/u/ramihu/sumTxt" );
BufferedOutputStream fileBuf = new BufferedOutputStream( new FileOutputStream( zipOut ) );
System.out.println("Open " + sourceFile.toString() + " and zip it up...");
// Create the ZIP file
ZipOutputStream out = new ZipOutputStream( fileBuf );
// Compress the files
FileInputStream in = new FileInputStream( sourceFile );
ZipEntry ze = new ZipEntry( sourceFile.toString() );
ze.setSize( sourceFile.length() );
ze.setTime( sourceFile.lastModified() );
System.out.println( "Created the ZipEntry..." );
System.out.println("ZIP ENTRY SIZE: " + ze.getSize() );
// Add ZIP entry to output stream.
out.putNextEntry(ze);
// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
out.finish();
out.flush();
// Complete the ZIP file
out.close();
System.out.println( "File " + sourceFile.toString() + " zipped up and ready for read..." );
// Now open it back up and check the data.
ZipInputStream in1 = new ZipInputStream(new FileInputStream(zipOut));
// Get the first entry
ZipEntry entry = in1.getNextEntry();
System.out.println("Attempting to get the uncompressed zip size: " + entry.getSize());
// Close the streams
in1.close();
System.out.println( "Done using ZipInputStream for Information about the Zip entry. Trying ZipFile instead..." );
try {
// Open the ZIP file
ZipFile zf = new ZipFile(zipOut);
System.out.println( "Using " + zipOut.toString() + " for test.");
// Enumerate each entry
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name
ZipEntry ent = ((ZipEntry)entries.nextElement());
System.out.println( "Using a ZipEntry initialized through ZipFile.getName: " + ent.getName() );
System.out.println( "Entry Size is: " + ent.getSize() );
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
// Need to throw some kind of an error here...
e.printStackTrace();
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Yes, make a system call to your platform zip and do it that way.
java version "1.6.0-rc"
Java(TM) SE Runtime Environment (build 1.6.0-rc-b104)
Java HotSpot(TM) 64-Bit Server VM (build 1.6.0-rc-b104, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
SunOS 5.9 Generic_117171-11 sun4u sparc SUNW,Ultra-Enterprise
Linux 2.4.26-openmosix1mt2 #1 Mon Apr 18 15:32:52 MDT 2005 i686 i686 i386 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
When trying to set the uncompressed size it does not save correctly.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Just replace the file to zip up with your own file and redirect the output to your own directory. When I take the test zip file and run zcat on it this is what I get for the header information.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Using file: /u/ramihu/test
Open /u/ramihu/sumTxt and zip it up...
Created the ZipEntry...
ZIP ENTRY SIZE: 2322595
File /u/ramihu/sumTxt zipped up and ready for read...
Attempting to get the uncompressed zip size: 2322595
Done using ZipInputStream for Information about the Zip entry. Trying ZipFile instead...
Using /u/ramihu/test for test.
Using a ZipEntry initialized through ZipFile.getName: /u/ramihu/sumTxt
Entry Size is: 2322595
ACTUAL -
Using file: /u/ramihu/test
Open /u/ramihu/sumTxt and zip it up...
Created the ZipEntry...
ZIP ENTRY SIZE: 2322595
File /u/ramihu/sumTxt zipped up and ready for read...
Attempting to get the uncompressed zip size: -1
Done using ZipInputStream for Information about the Zip entry. Trying ZipFile instead...
Using /u/ramihu/test for test.
Using a ZipEntry initialized through ZipFile.getName: /u/ramihu/sumTxt
Entry Size is: 2322595
******************* FROM THE COMMAND LINE ************************
telinux9{ramihu}38> file test
test: Zip archive data, at least v2.0 to extract
telinux9{ramihu}39> zcat -l test
compressed uncompressed ratio uncompressed_name
387872 -1 0.0% test
telinux9{ramihu}40>
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package javatests;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
byte[] buf = new byte[1024*8];
try {
File zipOut = new File( "/u/ramihu/test" );
// File zipOut = new File( "/u/summary/DEVL/sums/BDB/8Q/4B/11UNH" );
System.out.println( "Using file: " + zipOut.toString() );
File sourceFile = new File( "/u/ramihu/sumTxt" );
BufferedOutputStream fileBuf = new BufferedOutputStream( new FileOutputStream( zipOut ) );
System.out.println("Open " + sourceFile.toString() + " and zip it up...");
// Create the ZIP file
ZipOutputStream out = new ZipOutputStream( fileBuf );
// Compress the files
FileInputStream in = new FileInputStream( sourceFile );
ZipEntry ze = new ZipEntry( sourceFile.toString() );
ze.setSize( sourceFile.length() );
ze.setTime( sourceFile.lastModified() );
System.out.println( "Created the ZipEntry..." );
System.out.println("ZIP ENTRY SIZE: " + ze.getSize() );
// Add ZIP entry to output stream.
out.putNextEntry(ze);
// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
out.finish();
out.flush();
// Complete the ZIP file
out.close();
System.out.println( "File " + sourceFile.toString() + " zipped up and ready for read..." );
// Now open it back up and check the data.
ZipInputStream in1 = new ZipInputStream(new FileInputStream(zipOut));
// Get the first entry
ZipEntry entry = in1.getNextEntry();
System.out.println("Attempting to get the uncompressed zip size: " + entry.getSize());
// Close the streams
in1.close();
System.out.println( "Done using ZipInputStream for Information about the Zip entry. Trying ZipFile instead..." );
try {
// Open the ZIP file
ZipFile zf = new ZipFile(zipOut);
System.out.println( "Using " + zipOut.toString() + " for test.");
// Enumerate each entry
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name
ZipEntry ent = ((ZipEntry)entries.nextElement());
System.out.println( "Using a ZipEntry initialized through ZipFile.getName: " + ent.getName() );
System.out.println( "Entry Size is: " + ent.getSize() );
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
// Need to throw some kind of an error here...
e.printStackTrace();
}
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Yes, make a system call to your platform zip and do it that way.
- duplicates
-
JDK-4113731 ZipEntries retrieved through ZipInputStream return no values
-
- Closed
-
- relates to
-
JDK-6240058 Update ZipInputStream javadocs to describe more about getNextEntry() method
-
- Open
-
-
JDK-4813151 Jar utility should store compressed entry size information in LOC headers
-
- Closed
-
-
JDK-4079029 ZipInputStream isn't propagating info to ZipEntry via getNextEntry
-
- Closed
-
-
JDK-8057018 ZipEntry.setSize() does nothing: re-reading gives -1
-
- Closed
-