Autor Thema: Zip-File ohne "Full-Path" mit java.util.zip erstellen  (Gelesen 6064 mal)

Offline hampa

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • "As khunnt guat"
    • Hampas Blog
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
Notes R8.5.2 FP3
Server  R8.5.2 FP3

Windows 2008
Windows 7
Linux-Mint LMXDE

Lieber unvollkommen als total fertig.

Marinero Atlántico

  • Gast
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #1 am: 04.03.05 - 14:31:02 »
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(); 

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
« Letzte Änderung: 04.03.05 - 14:33:50 von Marinero Atlántico »

Offline hampa

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • "As khunnt guat"
    • Hampas Blog
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #2 am: 04.03.05 - 15:26:52 »
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) 

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();
		};
	};
 };
}

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
Notes R8.5.2 FP3
Server  R8.5.2 FP3

Windows 2008
Windows 7
Linux-Mint LMXDE

Lieber unvollkommen als total fertig.

Marinero Atlántico

  • Gast
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #3 am: 04.03.05 - 15:38:23 »
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

Offline hampa

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • "As khunnt guat"
    • Hampas Blog
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #4 am: 04.03.05 - 15:47:46 »
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
Notes R8.5.2 FP3
Server  R8.5.2 FP3

Windows 2008
Windows 7
Linux-Mint LMXDE

Lieber unvollkommen als total fertig.

Marinero Atlántico

  • Gast
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #5 am: 04.03.05 - 15:56:58 »
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:
Code
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.

Offline hampa

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • "As khunnt guat"
    • Hampas Blog
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #6 am: 04.03.05 - 16:11:40 »
Hallo Axel

Das würde bedeuten:

1. dass ich den Batch jedesmal dynamisch oder mit Parameterübergabe starten müsste, da das Verzeichnis jedesmal anders heisst. (Du erinnerst Dich: UniversalID  ;) )

2. ich den Start der Batch-Datei mit dem Shell-Command "absetzen" muss, und gemäss Notes-Hilfe der Agent nicht auf das Ende der Batch-Verarbeitung wartet, sondern einfach "weiterrauscht", egal, ob das Zip-File nun erstellt worden ist oder nicht.

Du siehst, ich tendiere dazu immer das letzte Wort zu haben. Nein, Quatsch. Natürlich nicht.  ;D Aber ich habe mir solche Lösungen auch schon durch den Kopf gehen lassen aber aus den obenannten "Befürchtungen" nicht umgesetzt. Jetzt liegt es an Dir, mich vom Gegenteil zu überzeugen.  ;)

Gruss Hampa
Notes R8.5.2 FP3
Server  R8.5.2 FP3

Windows 2008
Windows 7
Linux-Mint LMXDE

Lieber unvollkommen als total fertig.

Marinero Atlántico

  • Gast
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #7 am: 04.03.05 - 16:35:35 »
Hallo Hampa,

Du siehst, ich tendiere dazu immer das letzte Wort zu haben. Nein, Quatsch.
Endlich mal ein Gegner  ;D Quatsch. Natürlich nicht

Letztlich ist das ein Problem 2 asynchrone Prozesse miteinander zu synchronisieren. Es ist bei bestimmten Fällen machbar. Ich steuere z.B. gerade einen Tiff-Druckertreiber. Bringt aber extra Kopfschmerzen. Das ist schon klar.
Schau mal, ob ich das hinbekomme mit dem dynamischen Classloader.
Ich denke, dass es nicht anders geht.
Bin auch schon wahnsinnig geworden über das laden von Dateien über einen relativen Pfad in Java. Deshalb bin ich mir ziemlich sicher, dass das eigentlich nur darüber geht, dass sich das File in einem Root Verzeichnis eines Classloaders befindet ... und die kann man dynamisch erzeugen.

Gruß Axel

Marinero Atlántico

  • Gast
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #8 am: 07.03.05 - 13:57:57 »
...morgen.

Offline hampa

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
  • "As khunnt guat"
    • Hampas Blog
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #9 am: 07.03.05 - 20:58:26 »
...morgen.


Hallo Axel

Um himmels Willen. Lass Dir Zeit. Gut Ding will Weile haben.  ;D
Notes R8.5.2 FP3
Server  R8.5.2 FP3

Windows 2008
Windows 7
Linux-Mint LMXDE

Lieber unvollkommen als total fertig.

Offline aki

  • Frischling
  • *
  • Beiträge: 13
  • Geschlecht: Männlich
  • You never know.
Re: Zip-File ohne "Full-Path" mit java.util.zip erstellen
« Antwort #10 am: 10.03.05 - 22:51:07 »
Hi,

ich habe hier mal eine Demo-Datenbank gebastelt, bei der Dateien ohne die Pfadangabe in ein ZIP-Archiv gepackt werden.

Schau mal rein, vielleicht hilft Dir das Beispiel weiter.

Andreas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz