ZIP pieces jointes

Toutes les astuces sur le langage Java dans Lotus Notes

ZIP pieces jointes

Messagepar billbock » 15 Fév 2007 à 15:50

Agent JAVA permettant de zipper toutes les pieces jointes d'un document et de les zipper dans un fichier unique

Puis reattachement du ZIP dans le document

[syntax="java"]// used classes
import lotus.domino.*;
import java.io.*;
import java.util.*;
import java.util.zip.*;
import java.util.Vector;
import java.util.Enumeration;

// standard notes class
public class JavaAgent extends AgentBase {

// main programm
public void NotesMain() {
try {

// declaration of some variables
FileOutputStream fos;
RichTextItem rtitem;
String attachmentname;
String archivename;
String oldarchive;
byte b[] = new byte[512];

// initialize
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
DocumentCollection col = agentContext.getUnprocessedDocuments();
Document doc = col.getFirstDocument();

// loop through all documents
while (doc != null)
{

// save flag
boolean saveFlag = false;

// location of the data dir
archivename = session.getEnvironmentString("Directory",true) + "\\" + doc.getItemValueString("Topic") + ".zip";

// create an new file and zip output stream
fos = new FileOutputStream(archivename);
ZipOutputStream zout = new ZipOutputStream(fos);

// get the bodyfield
rtitem = (RichTextItem) doc.getFirstItem("Body");

// get all embedded objects and the number
Vector v = rtitem.getEmbeddedObjects();
Enumeration e = v.elements();

// loop through all objects
while (e.hasMoreElements())
{
EmbeddedObject eo = (EmbeddedObject)e.nextElement();

// check if it's an attachment
if (eo.getType() == EmbeddedObject.EMBED_ATTACHMENT)
{

// check the ending of the attachment, if it's a zip file, then it doesn't make sense to zip it again
if
( eo.getName().toUpperCase().endsWith( ".ZIP" ));
else
{
InputStream in = eo.getInputStream();
ZipEntry ze = new ZipEntry(eo.getName().replace(File.separatorChar,'/'));
zout.putNextEntry(ze);
int len=0;

// read the bytes
while((len=in.read(b)) != -1)
{
zout.write(b,0,len);
}

// close the entry and remove the attachment
zout.closeEntry();
eo.remove();
saveFlag = true;
}
}
}

// check if something has changed in the document
if (saveFlag)
{
// close the file- and zip output stream
zout.close();
fos.close();

// add some lines to the body item
rtitem.addNewLine( 3 );

// attach the file
rtitem.embedObject(EmbeddedObject.EMBED_ATTACHMENT, null, archivename, archivename);

// add some text to the subject line
doc.replaceItemValue("Subject", doc.getItemValueString("Topic") + " <contient des fichiers zippés>");

// save the document
doc.save(true, true);
saveFlag = false;

}

// close and delete the zip file
fos.close();
File zipfile = new File(archivename);
zipfile.delete();

// get the next document
doc = col.getNextDocument(doc);
}

// handle the errors
} catch (Exception e) {
e.printStackTrace();
}
}
}[/syntax]
Avatar de l’utilisateur
billbock
Modérateur
Modérateur
 
Message(s) : 310
Inscrit(e) le : 15 Fév 2007 à 13:58
Localisation : paris

Messagepar Michael DELIQUE » 31 Mars 2009 à 12:10

Pour zipper le fichier sans rajouter l'arobrescence

// Add ZIP entry to output stream.
File fileToZip = new File(pathFileToZip);
out.putNextEntry(new ZipEntry(fileToZip.getName()));
Cordialement

Michael (SMS-Phobique)
----------------------------
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi."
Albert EINSTEIN
Avatar de l’utilisateur
Michael DELIQUE
Administrateur
Administrateur
 
Message(s) : 12183
Inscrit(e) le : 16 Déc 2004 à 10:36
Localisation : Paris/Cergy

Re: ZIP pieces jointes

Messagepar scoste » 01 Sep 2010 à 09:03

J'ai utiliser ce code pour zipper des fichiers mais comme j'ai des accents dans mes noms de fichiers les noms de fichiers contenus dans le zip contiennent des +¿ au lieu d'un è.

J'ai recherché mais je ne trouve pas de solution. je pense qu'il s'agit d'un problème de charset entre le FileOutputStream, FileInputStream et le ZipEntry.

Est ce que qu'un a déjà rencontré le pb? avez vous une idée merci par avance

Sylvain coste
scoste
Découvre Dominoarea
Découvre Dominoarea
 
Message(s) : 2
Inscrit(e) le : 15 Mars 2007 à 17:45


Retour vers Java