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
InputStream is = egalWelchesObjekt.getClass().getClassLoader().getRessourceAsStream();
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
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:
'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)
Die Klasse ZipFile:
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();
};
};
};
}
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
Leicht ungewöhnliche Alternative:
Man kann auch mit jar zippen (Bestandteil des jdks).
Du erstellst das bat-File dynamisch (etwa auch LotusScript - mit korrekter Pfadangabe).
und in dem bat ist die Zeile:
Jar cvfM yourUpdate.zip *
Kannst du mal in einem Verzeichnis ausprobieren.
Wenn du im bat zunächst auf die richtige Stelle navigierst (über cd ) könnte das sogar klappen.