Solved

Zipping files up in Servlet

Posted on 2004-08-06
13
263 Views
Last Modified: 2008-02-20
I have a problem with a servlet that I'm using to zip up alot of files into one file... but I don't think I have the path correct... I'm not sure what to do since I've tried so many combinations, hoping to find the right path...

here's my code:      filesToZip[] is an array containing filenames for the files to be zipped... and zipFileName is the name of the zip file (ie. asdf.zip)

try {
     ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileName));
                                    
     // Set the compression ratio
     zos.setLevel(Deflater.DEFAULT_COMPRESSION);
                                    
    // iterate through the array of files, adding each to the zip file
     for (int i = 0; i < filesToZip.length; i++) {
            location = "/protected/files/" + filesToZip[i];
                                                                        
            // Associate a file input stream for the current file
            FileInputStream in = new FileInputStream(location); //***************
      
            // Add ZIP entry to output stream.
            zos.putNextEntry(new ZipEntry(location));
      
            int len;
                                    
            while ((len = in.read(buffer)) > 0) {
                  zos.write(buffer, 0, len);
            }
      
      
            // Close the current entry
            zos.closeEntry();
      
            // Close the current file input stream
            in.close();
      }
                              
      // Close the ZipOutPutStream
      zos.close();

} catch(Exception e) {
     System.out.println("Exception: " + e.getMessage());
}


My files are located /user/jakarta-tomcat/webapps/ROOT/protected/files/

Currently, at the place where i have labelled with alot of asterisks (//***************), an exception is thrown... so i have a feeling that they cannot find these files

Can anyone offer any suggestions?  thanks!

i usually like to offer more points, but today i only have 90...=\
0
Comment
Question by:alskdj80
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 5
13 Comments
 
LVL 35

Accepted Solution

by:
TimYates earned 90 total points
ID: 11737438
Have you tried:

 location = System.getProperty( "tomcat.home" ) + "/webapps/ROOT/protected/files/" + filesToZip[i];
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737495
I just tried it but I get a null value for System.getProperty( "tomcat.home" )
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737503
oh, but i just tried System.getProperty( "catalina.home" ) and it worked... i'll let you know what happens
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 3

Author Comment

by:alskdj80
ID: 11737568
no, it still doesnt seem to find it...

basically what im doing to check is this:

location = System.getProperty("catalina.home") + "/webapps/ROOT/protected/files/" + filesToZip[i];
System.out.println("here");  //CHECK1
FileInputStream in = new FileInputStream(location); //***************
System.out.println("works");  //CHECK2

it always prints "here" but never prints "works", so i assume that location is never found...
0
 
LVL 35

Expert Comment

by:TimYates
ID: 11737599
Try:

System.out.println("here (" + location + ")" );  //CHECK1

does it print out a reasonable location?
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737622
yes, it does... it prints out:
/home/user/jakarta-tomcat/webapps/ROOT/protected/files/asdf.txt
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737634
(that is one of the filenames in the filesToZip array)
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737648
i have access to unix shell as well, so i went to the root directory and typed:
>> cd /home/user/jakarta-tomcat/webapps/ROOT/protected/files

and i got to the right directory...
0
 
LVL 35

Expert Comment

by:TimYates
ID: 11737709
What exception is it printing out?

catch(Exception e) {
     System.out.println("Exception: " + e.getMessage());
     e.printStackTrace() ;
}
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737793
im not sure... im not actually getting errors from the catches... but i set the error prints so i know when it gets the exception...

i just tried putting one file through the zip... a file that i placed into /user/jakarta-tomcat/asdf.txt

i put this in the code:
filesToZip = new String[1];
filesToZip[0] = "asdf.txt";

and it worked!


but when i try doing this (and also putting asdf.txt into the appropriate folder), it produces the same error again:
filesToZip[0] = "/webapps/ROOT/asdf.txt";
0
 
LVL 35

Expert Comment

by:TimYates
ID: 11737822
what user is tomcat running as?  Does it have read access for that folder?  Does it have write access where it's trying to write the file?
0
 
LVL 3

Author Comment

by:alskdj80
ID: 11737905
hmm, i think i understand why... i had been taking the filenames from database, but apparently there was some corruption in some of the filenames...

thanks alot for helping me!  i think i can take it from here
0
 
LVL 35

Expert Comment

by:TimYates
ID: 11738016
No worries ;-)  Glad I could give you things to do whilst you worked it out ;-)

Good luck with it :-)

Tim
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes a serious pitfall that can happen when deleting shapes using VBA.
This post contains step-by-step instructions for setting up alerting in Percona Monitoring and Management (PMM) using Grafana.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa‚Ķ

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question