Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino
Zip-File ohne "Full-Path" mit java.util.zip erstellen
hampa:
Hallo Forum
Ich habe folgende Frage.
Ich möchte mit der Klasse java.util.zip ein Zip File erstellen, dass nur den Dateinamen enthält. Ich will damit sagen, nur die Datei ohne Pfadinformation. Analog der Abfrage im WinZip "Save full path info".
Die Java-Methode wird aus einem LotusScript-Agenten heraus aufgerufen, den ich aufgrund des Events "After Mails arrives" anstosse. Das erstellen des Zip-Files funzt wunderbar. Nur leider mit Pfad-Information. ???
Sollte es mit der Java-Klasse "java.util.zip" nicht möglich sein, frage ich euch, ob ihr schon Erfahrungen mit Batch-Files (*.BAT) und der "Shell"-Function (Lotus Script) gemacht habt. Aber vielleicht hat ja jemand von Euch eine ganz andere Idee.
Auf jeden Fall schon jetzt vielen Dank für Eure Ideen
Gruss aus der Schweiz
Hampa
Marinero Atlántico:
Ich vermute, das hängt damit zusammen, wie du das ZipFileEntry erstellst.
In diesem Zusammenhang ist es möglicherweise ganz sinnvoll die zu zippenden Files im Classpath zu haben und dann irgendwie
--- Code: ---InputStream is = egalWelchesObjekt.getClass().getClassLoader().getRessourceAsStream();
--- Ende Code ---
Bin mir aber nicht sicher und habe damit noch nicht gearbeitet.
Da du offenbar eine externe JVM über eine .bat aufrufst kannst du dort auch den Classpath umsetzen, erweitern.
Set Classpath=%Classpath%;C:\woDeineFilesSind
Axel
hampa:
Hallo Axel
Danke für Deine rasche Antwort. Ich glaube ich stelle mal den code rein, damit Du sehen kannst, wie im moment läuft.
Aus dem Agent heraus:
--- Code: ---'File zippen
Set js_zip = New JAVASESSION
Set zipClass_zip = js_zip.GetClass("ZipFile")
Set zipFileObject_zip = zipClass_zip.CreateObject
varZipFile = docProfile.NewZipFileName(0) 'Name des neuen Zip-Files
varFilePath = docProfile.ScratchDir(0) 'Ziel-Root-Verzeichniss für "gezippte" File
varDirPreFix = doc.UniversalID 'UNID des zu verarbeiteten Emails (Name des verzeichnisses)
'Calling the zip function
returnCode_zip = zipFileObject_zip.ZipMyFiles(varZipFile, varFilePath, varDirPreFix)
--- Ende Code ---
Die Klasse ZipFile:
--- Code: ---import java.io.*;
import java.util.zip.*;
public class ZipFile {
public String zipMyFiles(String zipFile, String FilePath, String DirPreFix) {
File file = new File(FilePath + "/" + DirPreFix + "/newtexttmp");
try {
String zipFileName = FilePath + "/" + DirPreFix + "/" + zipFile;
System.out.println(zipFileName);
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFileName + ".zip")));
File f = file;
fileWalk(f, zos);
zos.finish();
zos.close();
} catch (IOException e) {
e.printStackTrace();
};
return "OK";
};
public static void fileWalk(File f, ZipOutputStream zos) {
if (f.isDirectory()) {
File[] files = f.listFiles();
for (int i = 0; i < files.length; i++) {
fileWalk(files[i], zos);
}
} else {
try {
ZipEntry entry = new ZipEntry(f.getCanonicalPath());
zos.putNextEntry(entry);
BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));
byte[] buffer = new byte[4096];
int len;
while ((len = br.read(buffer)) > 0) {
zos.write(buffer);
zos.flush();
}
zos.closeEntry();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
};
};
};
}
--- Ende Code ---
Die Problematik ist nun die, dass das Objek File z.B. den Inhalt d:\scratch\acd\D265F7A4EF6922F2C1256FBA0047A0F8\newtexttmp\ hat. Jetzt sollen alle Files, die sich in diesem Verzeichnis befinden in das zu erstellende Zip-File mit dem Namen d:\scratch\acd\D265F7A4EF6922F2C1256FBA0047A0F8\ACD Statistik.zip eingepackt werden. Aber eben ohne den Pfad (d:\scratch\acd\D265F7A4EF6922F2C1256FBA0047A0F8\newtexttmp\
Den Directory-Aufbau muss ich so machen, um einer Verwechslung der Files vorzubeugen. Denn die die Files im Verzeichnis \newtexttmp können gleiche Namen haben. (Der Agent arbeitet mehrere NotesDokumente ab.) Die etwas kryptische Verzeichnis-Bezeichnung ist die UniversalID des sich in Arbeit befindlichen NotesDokumentes.
Ich weiss, hört sich alles extrem kompliziert an, aber isses eigenglich gar nicht. Wenn man verstanden hat, was ich sagen will. ;D ;D
Gruss und vielen Dank
Hampa
Marinero Atlántico:
Man könnte das mit einem dynamischen Classloader versuchen.
Meiner Meinung nach muss das File in irgendeinem Classloader-Basisverzeichnis sein!
Ich hab aber auch noch nicht mit dynamischen Classloadern herumexperimentiere, wollte das aber sowieso machen und hier ist eine Aufgabe.
Nehm mir das mal mit ins Wochenende.
Werde mich auf jeden Fall melden. Auch wenn ich nicht weiterkomme.
Axel
hampa:
Hallo Axel
Danke. Das ist aber toll!
Habt ihr denn am Wochenende kein schönes Wetter, dass Du am PC hockst. ;D
Wenn Du weitere Infos für die "Aufgabenstellung" benötigst, lass es mich wissen.
Ich muss dazu sagen, dass ich ein blutiger Java-Anfänger bin. Ich beschäftige mich seit Jahren mit Lotus Notes zur Web-Applikationserstellung und mache jetzt meine ersten Gehversuche in JAVA. Danke für die tolle Unterstützung.
Gruss und trotzdem ein schönes weekend.
Hampa
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln