Zip from LotusScript in Notes/Domino 6

LotusScript does not have a native class for compressing files to .zip format -- in this tip, I'll show you how to change that.

LotusScript does not have a native class for compressing files to .zip format. In this tip, I'll show you how change that, if you are running Notes or Domino R6 (or newer), by using the ability of LotusScript to make calls to functionality that is available in the Java language. This is done using LS2J -- which is documented in Designer Help.

I have an agent that holds the following code in Initialize:

Sub Initialize
 Dim js As JAVASESSION
 Dim zipClass As JAVACLASS
 Dim zipFileObject As JavaObject
 Dim varFileToZip As String, varOutFilePath 
As String, returnCode As String
 
 Set js = New JAVASESSION
 Set zipClass = js.GetClass("ZipFile")
 Set zipFileObject = zipClass.CreateObject
 varFileToZip = "c:tempdocument.doc"
 varOutFilePath = "c:tempthezipfile.zip"
 
 returnCode = zipFileObject.zipMyFile
(varFileToZip, varOutFilePath) 
'Calling the zip function
 
 If Not returnCode = "OK" Then
  Print "An Error occurred"
 Else
  Print "Zip went OK"
 End If
End Sub
In the Options of the agent I have the following:
Uselsx "*javacon" 'Which lets you use
 Java from LotusScript
Use "ZipFile" 'A Java library that holds 
a function to do zipping
Below is the Java Library that makes it possible to zip a file. You create a Java Library in the Designer in Shared code -> Script Libraries, click New Java Library, remove the few lines of code that you get as a help for getting started, and paste the code below. Save and call the library "ZipFile."
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFile {
 public String zipMyFile(String fileToZip, 
String zipFilePath) {
  String result = ""; 

      byte[] buffer = new byte[18024];
 
      // Specify zip file name
      String zipFileName = zipFilePath;
 
      try {
 
        ZipOutputStream out =
          new ZipOutputStream
(new FileOutputStream(zipFileName));
 
        // Set the compression ratio
        out.setLevel
(Deflater.BEST_COMPRESSION);
 
          System.out.println(fileToZip);
          // Associate a file input stream 
for the current file
          FileInputStream in = 
new FileInputStream(fileToZip);
 
          // Add ZIP entry to output stream.
          out.putNextEntry
(new ZipEntry(fileToZip));
 
          // Transfer bytes from 
the current file to the ZIP file
          //out.write(buffer, 0, in.read(buffer));
 
          int len;
         while ((len = in.read(buffer)) > 0) 
         {
         out.write(buffer, 0, len);
        }
 
          // Close the current entry
          out.closeEntry();
 
          // Close the current file input stream
          in.close();
 
        // Close the ZipOutPutStream
        out.close();
      } 
      catch (IllegalArgumentException iae) {
        iae.printStackTrace();
   return "ERROR_
ILLEGALARGUMENTSEXCEPTION";
      }
      catch (FileNotFoundException fnfe) {
        fnfe.printStackTrace();
    return "ERROR_FILENOTFOUND";
      }
      catch (IOException ioe)
      {
      ioe.printStackTrace();
      return "ERROR_IOEXCEPTION";
      }


  return "OK";
  
  }
}
Credit goes to this article that helped me get zipping to work: Zip meets Java from Devshed.

About the author: Jens Bruntt has been a developer and infrastructure advisor for Notes and Domino projects since 1994 and is an R6 Principal Developer working as project manager or consultant depending on the project's size and requirements. He has a Masters degree in Library- and Information Science. Jens works at Convergens.dk as a senior consultant, primarily architecting Domino browser-based Internet, intranet and extranet sites. He is also a SearchDomino.com site expert.

Do you have comments on this tip? Let us know.

Please let others know how useful it is via the rating scale below. Do you have a useful Notes/Domino tip or code to share? Submit it to our monthly tip contest and you could win a prize and a spot in our Hall of Fame.

This was first published in August 2004

Dig deeper on LotusScript

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchWindowsServer

Search400

  • iSeries tutorials

    Search400.com's tutorials provide in-depth information on the iSeries. Our iSeries tutorials address areas you need to know about...

  • V6R1 upgrade planning checklist

    When upgrading to V6R1, make sure your software will be supported, your programs will function and the correct PTFs have been ...

  • Connecting multiple iSeries systems through DDM

    Working with databases over multiple iSeries systems can be simple when remotely connecting logical partitions with distributed ...

SearchEnterpriseLinux

SearchDataCenter

SearchExchange

SearchContentManagement

Close