# Datei innerhalb einer zip bearbeiten



## Dog86 (11. Aug 2009)

Hallo Leute,

ich muss euch leider wieder mal mit einem kleinen Problemchen belästigen.

Ich will eine XML Datei innerhalb einer ZIP bearbeiten.

Wie ich eine ZIP entpacken kann habe ich bereits gefunden:


```
public class ZipArchiveExtractor {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		new ZipArchiveExtractor().extractArchive(new File(
				"s:/tools/eclipse/plugins/com.ibm.icu_3.4.4.1.jar"), new File(
				"c:/tmp/x"));
	}

	public void extractArchive(File archive, File destDir) throws Exception {
		if (!destDir.exists()) {
			destDir.mkdir();
		}

		ZipFile zipFile = new ZipFile(archive);
		Enumeration entries = zipFile.entries();

		byte[] buffer = new byte[16384];
		int len;
		while (entries.hasMoreElements()) {
			ZipEntry entry = (ZipEntry) entries.nextElement();

			String entryFileName = entry.getName();

			File dir = dir = buildDirectoryHierarchyFor(entryFileName, destDir);
			if (!dir.exists()) {
				dir.mkdirs();
			}

			if (!entry.isDirectory()) {
				BufferedOutputStream bos = new BufferedOutputStream(
						new FileOutputStream(new File(destDir, entryFileName)));

				BufferedInputStream bis = new BufferedInputStream(zipFile
						.getInputStream(entry));

				while ((len = bis.read(buffer)) > 0) {
					bos.write(buffer, 0, len);
				}

				bos.flush();
				bos.close();
				bis.close();
			}
		}
	}

	private File buildDirectoryHierarchyFor(String entryName, File destDir) {
		int lastIndex = entryName.lastIndexOf('/');
		String entryFileName = entryName.substring(lastIndex + 1);
		String internalPathToEntry = entryName.substring(0, lastIndex + 1);
		return new File(destDir, internalPathToEntry);
	}
}
```

Doch gibt es auch die möglichkeit and die Datei ran zu kommen ohne das ganze erst zu entpacken und dann wieder zu packen..ist mir irgendwie umständlich, daher die Frage ob es auch einen anderen weg gibt an die Datei ran zu kommen und sie zu bearbeiten.


----------



## Gonzo17 (11. Aug 2009)

Ich kann mir nicht vorstellen, dass man eine Datei innerhalb eines gepackten Zip-Files editieren kann. Du kannst die Datei vielleicht aufrufen, aber nicht wieder dort speichern, denke ich.


----------



## Atze (11. Aug 2009)

soweit ich weiß nicht! ein zip ist ja ein komprimiertes archiv, von daher musst du die datei wohl entpacken, ändern und wieder zum archiv hinzufügen


----------



## maki (11. Aug 2009)

Atze hat gesagt.:


> soweit ich weiß nicht! ein zip ist ja ein komprimiertes archiv, von daher musst du die datei wohl entpacken, ändern und wieder zum archiv hinzufügen


Dem Archiv hinzufügen geht nicht, es muss neu erstellt werden


----------



## Dog86 (11. Aug 2009)

Hmm, schade.

Aber danke für die schnellen Antworten, dann muss ich das wohl doch über diesen umständlichen weg machen.


----------



## Atze (11. Aug 2009)

maki hat gesagt.:


> Dem Archiv hinzufügen geht nicht, es muss neu erstellt werden


spalter!  hast ja recht


----------



## Wildcard (11. Aug 2009)

Zip(also auch jar) erlaubt das hinzufügen und entfernen von Dateien ohne neu zu packen.


----------



## maki (11. Aug 2009)

Aha, war mir neu


----------



## Wildcard (11. Aug 2009)

Leider bietet die Java API keinen echten RandomAccess auf ein Zip/Jar.
Die ANT API und TrueZip können zips und jars updaten. Allerdings bin ich mir nicht sicher ob das File intern neu gepackt wird, oder ein echtes Update stattfindet.


----------

