File mit sonderzeichen zippen

Wurzelseppi

Mitglied
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];
// Specify zip file name
String zipFileName = zipFilePath;
try {
ZipOutputStream out =
new ZipOutputStream(new FileOutputStream(zipFileName));


// Set the compression ratio
out.setLevel(Deflater.BEST_COMPRESSION);

// Associate a file input stream for the current file
FileInputStream in = new FileInputStream(fileToZip);
// Add ZIP entry to output stream.

File newFile = new File(fileToZip);

System.out.println("Name des Files: " + newFile.getName());

//out.putNextEntry(new ZipEntry(fileToZip));
out.putNextEntry(new ZipEntry(newFile.getName()));

// Transfer bytes from the current file to the ZIP file
//out.write(buffer, 0, in.read(buffer));
int len;
while ((len = in.read(buffer)) > 0)
{
out.write(buffer, 0, len);
}
// Close the current entry
out.closeEntry();
// Close the current file input stream
in.close();
// Close the ZipOutPutStream
out.close();
}
catch (IllegalArgumentException iae) { ........


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

Vielen Dank für Tipps.

Gruß,

Wurzelseppi
 

Anhänge

  • sf_jpeg.jpg
    sf_jpeg.jpg
    12,5 KB · Aufrufe: 959
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:
Java:
/**
 * 
 */
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
 
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
 
Moin!
Wie wäre es dann damit, den Dateinamen im UTF-8 Format abzuspeichern?
Code:
out.putNextEntry(new ZipEntry(URLEncoder.encode(newFile.getName(), "UTF-8")));
Gezippter Dateiname (Testß.txt):
Beim Entpacken kannst du sie ja dann wieder umbennen (URLDecoder.decode(filename,"UTF-8")).

*grüssle*
MeinerEiner
 
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
 
wo bekomme ich die Apache Zip version her?
Ich bin über google nur auf eine Japanische Seite gestossen.

Gruess
FG
 
Zurück