Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Running Zipping Program from within JSP

Posted on 2003-11-13
3
Medium Priority
?
228 Views
Last Modified: 2010-04-01
Ok, here is the situation.  We have a website linked to a massive database (USDA).  Through the website the user can pair down this data to get a more refined data set.  For example, The user can see the reported losses report by corn farmers in Kansas for 2000 through 2003.  We want to allow the user to no only see the data in the browser, but to be able to save and download the data as a Comma Seperated Value (CSV) file.  Saving the file is failry simple and we have that worked out.  These files are huge, so we want to zip them after they are created to make downloads faster.  The only problem is I can't get teyh command line version of any zipping program (winzip, winrar, etc..) to run from inside JSP code.  Here is the code, please help if you have any ideas.

// the file is already created
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
String[] cmd = {"winrar.exe A", "d:\\tomcat4\\webapps\\dashboard\\down.zip d:\\tomcat4\\webapps\\dashboard\\data.csv"};
 p = rt.exec(cmd);
p.waitFor();
} catch (Exception e)
{
e.printStackTrace();
}
0
Comment
Question by:sjno
[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
3 Comments
 
LVL 2

Accepted Solution

by:
dyanet earned 750 total points
ID: 9740753
Two other solutions for you:
1. use java.util.zip package to compress the files. Use FileInputStream to read the file in and ZipOutputStream to write it the output file.  You can probably do that while you are creating the CSV file for the first time.
2. If you are running behind Apache, investigate and see if mod_gzip will solve your problem.  Most modern browsers support compressed content and Apache will automatically compress the file to achieve the desired goal - less use of bandwidth.
0
 

Expert Comment

by:u9707118
ID: 9741619
Here is a pure java solution that I have written for my project.
You can play around with the 'BUFFER' size for performance.


import java.util.ArrayList;
import java.util.zip.*;
import java.io.*;

static final int BUFFER = 2048;
byte data[] = new byte[BUFFER];          

FileOutputStream dest = new FileOutputStream("c:\\mydata\\myZipFile.zip");
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
BufferedInputStream origin;
ArrayList filenameList = new ArrayList();

filenameList.add("mycsvfile1.csv");
filenameList.add("mycsvfile2.csv");
//etc..

for (int counter=0; counter<filenameList.size(); counter++) {
            FileInputStream fi = new FileInputStream((String)filenameList.get(counter));
            origin = new BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry((String)filenameList.get(counter)); //creates entry containing file
               
            entry.setMethod(ZipOutputStream.DEFLATED); //sets method to compressed
            out.putNextEntry(entry); //adds entry to zip file
       
            //write data to zip file
            int count;
            while((count = origin.read(data, 0, BUFFER)) != -1) {
                out.write(data, 0, count);
            }//end while
            origin.close();          
                 
}//end for
out.close();




Hey presto you have a compressed zip file that you can spit back to your user.

Hope this helps,

Damian
0
 

Author Comment

by:sjno
ID: 9742085
If I knew how to split points I would but since dyanet answered first they gets the points I guess.
0

Featured Post

[Webinar] Lessons on Recovering from Petya

Skyport is working hard to help customers recover from recent attacks, like the Petya worm. This work has brought to light some important lessons. New malware attacks like this can take down your entire environment. Learn from others mistakes on how to prevent Petya like worms.

Question has a verified solution.

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

Without even knowing it, most of us are using web applications on a daily basis.  In fact, Gmail and Yahoo email, Twitter, Facebook, and eBay are used by most of us daily—and they are web applications. We generally confuse these web applications to…
Want to know how to use Exchange Server Eseutil command? Go through this article as it gives you the know-how.
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

670 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