# File mit sonderzeichen zippen



## Wurzelseppi (12. März 2007)

Hallo zusammen,

folgendes Problem:

Ich habe ein File und möchte es archivieren (ZIP). Im Filenamen steckt ein "ß". Es haut alles hin bis zu dem Zeitpunkt, wo es als java.util.zip.ZipEntry dem java.util.zip.ZipOutputStream hinzugefügt wird.

Hier der Code:



> public class ZipFile {
> public String zipMyFile(String fileToZip, String zipFilePath) {
> String result = "";
> byte[] buffer = new byte[18024];
> ...




Das Resultat ist in dem angehängten jpeg zu sehen.

Vielen Dank für Tipps.

Gruß,

Wurzelseppi


----------



## Thomas Darimont (12. März 2007)

Hallo,

das ist ein JDK Bug:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4415733

mit dim ZipOutputStream von Apache ant ist das kein Problem:

```
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.Channels;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

/**
 * @author Tom
 */
public class ZipExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("c:/java.zip"));
    zipOutputStream.setEncoding("Cp850");
    File file = new File("c:/ein ganz böser großer dateiname.txt");
    ZipEntry zipEntry = new ZipEntry(file.getName());
    zipOutputStream.putNextEntry(zipEntry);
    new FileInputStream(file).getChannel().transferTo(0, file.length(), Channels.newChannel(zipOutputStream));
    zipOutputStream.closeEntry();
    zipOutputStream.close();
  }
}
```

Gruß Tom


----------



## Wurzelseppi (13. März 2007)

Ich kann nicht so einfach jars einbinden. Ist eine bestehende Applikation im Lotus Notes/Domino Umfeld, und hier jedenfalls kann ich nur auf standardmäßige JDK 1.4 Komponenten zugreifen :-(

Hab ich jetzt wohl die A-Karte gezogen, oder ?

Gruß,

Wurzelseppi


----------



## MeinerEiner_80 (13. März 2007)

Moin!
Wie wäre es dann damit, den Dateinamen im UTF-8 Format abzuspeichern?

```
out.putNextEntry(new ZipEntry(URLEncoder.encode(newFile.getName(), "UTF-8")));
```
Gezippter Dateiname (Testß.txt):


> Test%C3%9F.txt


Beim Entpacken kannst du sie ja dann wieder umbennen (URLDecoder.decode(filename,"UTF-8")).

*grüssle*
MeinerEiner


----------



## Wurzelseppi (13. März 2007)

geht auch ned, da das gezippte File dann einfach vermailt wird und ich auf den Vorgang des "auspackens" keinen Einfluss habe.

Ich habs jetzt so gelöst, daß die Umlaute vorher umgewandelt werden "Ü" --> "Ue" usw...

Das geht in meiner Konstellation..

Vielen Dank nochmal.

Gruß,

Wurzelseppi


----------



## java2 (30. Dezember 2007)

wo bekomme ich die Apache Zip version her?
Ich bin über google nur auf eine Japanische Seite gestossen.

Gruess
FG


----------



## zeja (1. Januar 2008)

Na so schwer ist Ant nicht zu finden: http://ant.apache.org/


----------

