Hi Thomas,
ja, ein scharfer Blick in den Source kann ja Berge versetzen.

Danke Dir Thomas!
Unzip lässt sich mit mit Deinem Tipp tatsächlich dazu überreden das Zip-File auszupacken.
Mein gewünschtes explizites Setzen der Art eines ZipEntries, kann (und muss - meiner Meinung nach) dennoch durchgeführt werden.
Man muss das 4. Bit der External-Atrributes setzen! Ist dieses Bit an, ist es ein Verzeichnis, ist es aus, handelt es sich um eine Datei.
Hier nochmal das komplette Beispiel zum Mitschreiben:
Java:
package org.example;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class ZipTest {
public final static long ZIPENTRY_IS_DIRECTORY = 1<<4;
public final static String WINDOW_ZIP_ENCODING="Cp437";
public final static String NON_WINDOW_ZIP_ENCODING="UTF-8";
public static void main (String argv[]) {
try {
// Bitmask indicating directories in 'external attributes' of a ZIP archive entry.
FileOutputStream dest = new FileOutputStream("/tmp/checkFolder.zip");
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
out.setEncoding(WINDOW_ZIP_ENCODING);
ZipEntry folderEntry = new ZipEntry("TestFolder/");
folderEntry.setExternalAttributes(folderEntry.getExternalAttributes()|ZIPENTRY_IS_DIRECTORY);
folderEntry.setComment("My Folder comment.");
out.putNextEntry(folderEntry);
out.closeEntry();
ZipEntry fileEntry = new ZipEntry("TestFolder/TestFile.txt");
fileEntry.setComment("My File comment.");
out.putNextEntry(fileEntry);
out.write("Hallo Zip!".getBytes());
out.closeEntry();
out.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
Nun kann auch Windows-Zip was damit anfangen.
Alternativ kann man auch sinniger Weise den Unixmode setzen.

Der rechnet nämlich ganz neben bei ein komplettes ExternalAttribute zusammen.
Natürlich für Verzeichnisse nur richtig, wenn Dein Slash am Ende des Verzeichnis-Namens steht.
Java:
public void setUnixMode(int mode) {
setExternalAttributes((mode << 16)
// MS-DOS read-only attribute
| ((mode & 0200) == 0 ? 1 : 0)
// MS-DOS directory flag
| (isDirectory() ? 0x10 : 0));
platform = PLATFORM_UNIX;
}
Das sollte dann zu allen möglichen Plattformen kompatible sein.
Viele Grüße
Arne