File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
The moose likes Java in General and the fly likes Ruthlessly smash the bug...but where is it? Big Moose Saloon
  Search | Java FAQ | Recent Topics
Register / Login


Win a copy of The Mikado Method this week in the Agile and other Processes forum!
JavaRanch » Java Forums » Java » Java in General
Reply Bookmark "Ruthlessly smash the bug...but where is it?" Watch "Ruthlessly smash the bug...but where is it?" New topic
Author

Ruthlessly smash the bug...but where is it?

Wesley Baker
Ranch Hand

Joined: Aug 20, 2008
Posts: 45
I need a code review badly. I have a zip class that is using java.util.zip, and everything works great - except when I try to zip something up on Windows (this doesn't happen on Mac).

The bug is that my code is not zipping stuff up the same way ZipGenius, WinZip, or even the IPWorks Java Zip API is doing it. All of these things work, but mine is causing a corrupted ODT file for OpenOffice. My suspicion is that the problem lies somewhere in the relativePath variable, or at least something to do with the directory structure of the zip.

ANY help (and I do mean any) is much appreciated.

Santhosh Kumar
Ranch Hand

Joined: Nov 07, 2000
Posts: 242
I tried to run your code (ofcourse after changing the TAGFile to File and removing the TAGLogger), it worked fine. I zipped using the class and unzipped using Winzip without any issues.
Wesley Baker
Ranch Hand

Joined: Aug 20, 2008
Posts: 45
Good to hear! I have had the same results, unless it is an ODT file, which si why I am so confused

This is what I'm doing:
If you have OpenOffice installed, create a Write document with some basic text. Save it and unzip the resulting .ODT file into a folder.

If you take this code (on Windows) and use it to zip up the contents of that folder, the ODT will be corrupt. But if you zip up the contents with Winzip, it will work fine.
Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 3036
    
    4

I don't know the fix yet, but the specific problem is:

The ODT file is a zip file that looks like this:


Your code generates the output like this:


What I think you need to do is detect if the file to zip is a directory and if it is then get the list of files and add them directly rather than adding the directory and the children.

I have to check what you are actually doing though... and I don't know how that would be different on Windows vs. Mac or Linux...

--This above has to do with the zip(File) and zip(File, String) methods. If you call the zip(File[] ...) methods no extra directory is generated.
[ August 20, 2008: Message edited by: Steve Luke ]

Steve
Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 3036
    
    4

Interestingly - when you zip with your application then unzip then rezip with winZip, it works again...
Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 3036
    
    4

Got it. Zip files (not even ones that windows Compression or WinZip makes) don't use the "\" File separator character. they always use "/". So When I changed all the places you had File.separator to "/" I could open the odt files in OpenOffice without a problem.
[ August 20, 2008: Message edited by: Steve Luke ]
Wesley Baker
Ranch Hand

Joined: Aug 20, 2008
Posts: 45
Steve...I don't know what to say. You have solved what every other Java forum out there couldn't figure out. I've been to Sun, OpenOffice, and NeoOffice forums, and they all couldn't figure it out.

All hail Steve!

Thank you so much, sir.
Steve Luke
Bartender

Joined: Jan 28, 2003
Posts: 3036
    
    4

Happy to help :-)
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Ruthlessly smash the bug...but where is it?
 
Similar Threads
Nothing gets written to the zip file
ZipOutputStream
zip file bug?
How to unzip a file??
how to zip multiple files and directory into one output