sexta-feira, 21 de janeiro de 2011

Compactar arquivos com Notes 6

http://searchdomino.techtarget.com/tip/1,289483,sid4_gci1002690,00.html

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.

Nenhum comentário:

Postar um comentário