Granny's Programming Pearls
"inside of every large program is a small program struggling to get out"
The moose likes Java in General and the fly likes cannot uzip what it zips Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark " cannot uzip what it zips" Watch " cannot uzip what it zips" New topic
Author cannot uzip what it zips

Alejandro Barrero
Ranch Hand

Joined: Aug 01, 2005
Posts: 327
My problem began deploying a war file in tomcat. I get the error: C:\MyWorkSpaces\X\A Swing Help System with CreateWebHelp_files\image001.png (The system cannot find the path specified)

The file is in the war file and if I change the extension to zip, WinZip constructs the directory correctly. If I zip the original directory wit WinZip, it deploys fine in Tomcat.

Tomcat uses to unzip, so i created a program to unzip and i get the same error. The code is:

I really need to write code to create the war file; your help will be greatly appreciated. If you can tell me another way to code zip I will appreciate it too.

Alejandro Barrero

Your help will be greatly appreciated,
Alejandro Barrero
Rob Spoor

Joined: Oct 27, 2005
Posts: 20275

The problem is that at least one folder could not be created. I guess something is wrong with the creation of the folder.

Now I could try to fix that, but it's not necessary. Folders are ZIP entries as well; use the isDirectory() function to test whether or not an entry is a directory.

I also added a bit of code to use a File object - it has some nice methods you can use.

How To Ask Questions How To Answer Questions
Alejandro Barrero
Ranch Hand

Joined: Aug 01, 2005
Posts: 327

Thank you very much, but that doesn't help. I created I zip file with my code, I added your suggested code:
protected void getFile(ZipEntry zipEntry) throws Exception {
String zipName = zipEntry.getName();
if (zipEntry.isDirectory())
File file = new File(this.unzipDirectory, zipName);
// now the folder should really be there, unless you don't have the
// rights to write it or there was already a file with the same name
//String zipName = zipEntry.getName();
if (zipName.endsWith("/")) {
if (zipName.startsWith("/")) {
zipName = zipName.substring(1);
// Create a directory if needed.
int locationOfLastSeparator = zipName.lastIndexOf("/");
if (locationOfLastSeparator != -1) {
String directoryRelativePath = zipName.substring(0, locationOfLastSeparator);
String directoryPath = this.unzipDirectory + File.separator + directoryRelativePath;
FileOutputStream fileOutputStreamos = new FileOutputStream(
this.unzipDirectory + File.separator + zipName);
InputStream inputStream = this.workZipFile.getInputStream(zipEntry);
int characterCount = 0;
while ((characterCount = > 0)
fileOutputStreamos.write(this.byteBuffer, 0, characterCount);
But I still have the same error.
Guido Sautter
Ranch Hand

Joined: Dec 22, 2004
Posts: 142
Could you post a stack trace of the error, so we can see which line of your code actually produces the exception? This might help a lot in finding the source or the problem ...
Alejandro Barrero
Ranch Hand

Joined: Aug 01, 2005
Posts: 327
Well, my unzip started to work. Most probably it is because of the changes you suggested (apparently I missed the fact that it was working before). So, thanks for your suggestion.
Unfortunately, I still cannot deploy in Tomcat the war file that I zip. I am getting a long error message:
The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path C:\Program Files\Java\jdk1.6.0_02\bin;C:\Windows ...
Now I have to dig more and post the problem in an other forum.
I agree. Here's the link:
subject: cannot uzip what it zips
It's not a secret anymore!