Komplettes Zippen

Status
Nicht offen für weitere Antworten.
D

David

Gast
Ich hab folgendes Problem. Ich will etwas zippen. Dazu wähle ich in einem JTree ein Verzeichniss aus und starte dann durch Buttondruck eine Methode die den pathnamen erhält. Er zipt zwar auch jedoch bekomm ich Probleme wenn in den Ordner weitere Verzeichnise mit Daten enthalten sind. Also wenn in dem angewählten Ordner nur Daten sind zipt er. Ich kann die Zipdatei auch öffnen, sind jedoch weiter Verzeichnise enthalten zipt er zwar aber ich kann die Zip datei nicht öffen. Ausserdem soll im Zip Menü bei "Pfad" nicht der ganze Pfad (ab C:/.." stehen sondern nur ab dem Verzeichniss welches ich gelöscht habe) da ich die Zipdatei auch auf anderen Rechner entpacken will. Hier mein Code:

Code:
public static void zip(myFile pathname) {

	File files2[] = pathname.listFiles();
	String test2[] = new String[files2.length];

	for (int i = 0; i < files2.length; i++) {
	  test2[i] = files2[i].getAbsolutePath();
	  System.out.println(test2[i]);
	}

	// Buffer öffnen um Datein zu lesen
	byte[] buf = new byte[1024];

	//nun folgt eine try catch Anweisung um Exceptions zu behandeln / habe einen String erstellt der den Namen des zipFiles darstellt und einen Output Stream Filter mit dem ich Files ins Zip Format schreibe
	try {
	  String outFilename = "outfile.zip";
	  ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
		  outFilename));

	  //Komprimiert die Datei
	  //nun füge ich das Zip zum output Stream hinzu, putNextEntry beginnt einen neuen ZipFileEintrag zu schreiben:
	  for (int i = 0; i < test2.length; i++) {

		System.out.println(test2[i]);
		FileInputStream in = new FileInputStream(test2[i]);

		//fügt ZIP zum output stream hinzu
		//nun füge ich das Zip zum output Stream hinzu, putNextEntry beginnt einen neuen ZipFileEintrag zu schreiben:
		out.putNextEntry(new ZipEntry(test2[i]));

		//überträgt bytes von der Datei zu der Zip Datei
		//Nun übertrage ich die Bytes von der Datei zum ZipFile, write schreibt hierbei ein Array von Bytes in den derzeitigen ZipEintrag
		int len;
		while ( (len = in.read(buf)) > 0) {
		  out.write(buf, 0, len);
		}
		out.closeEntry();
		in.close();
	  }
	  //vervollständigt das zip file
	  out.close();
	}
	catch (IOException e) {
	  System.out.println(e.getMessage());
	}
  }
 
G

Guest

Gast
SOrry sehe gerade die Überschrift sollte natürlich komplettes zippen heissen :shock:
 
B

Beni

Gast
Das File files2[] = pathname.listFiles(); liefert dir nur gerade die Files in "pathname". Ein File in einem Unterverzeichniss gehört aber nicht mehr in das Verzeichniss "pathname", wird also auch nicht aufgelistet.

Also musst du die selber sammeln, wie in diesem Thread.

Was den Pfad angeht, ich würde das so machen (nur vom Prinzip her):
Code:
File file = ...
String path = file.getPath();
String parentPath = file.getParent().getPath();

path = path.substring( parentPath.length() );
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben