[Java] .tar files entpacken (Filenamen > 100 characters)

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Xen0n, 11. August 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 11. August 2010
    .tar files entpacken (Filenamen > 100 characters)

    Hi,

    Ich habe eine Klasse "UntarBean.java", mit deren Hilfe ich .tar-files entpacken möchte.

    Sie sieht bisher so aus:

    Code:
    import com.ice.tar.*;
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    //[...] weitere unwichtige Imports
    
    
    public class UntarBean{
    
     //[...] einige Setter&getter für input bzw output file
     
     public void process() throws Exception {
     
     
     outputDir.mkdir();
     
     InputStream in = new BufferedInputStream(new FileInputStream(inputFile));
     TarArchive archive = new TarArchive(in);
     archive.extractContents(outputDir);
     
     }
    }
    
    Diese Methode process() funktioniert einwandfrei; AUßER: Die Dateinamen sind länger als 100 Zeichen.
    --> Ich habe ein .tar-Archive mit einer langen Ordner-Struktur, in denen sich ganz "unten" einige Dateien befinden.
    Leider stehen bei tar-Archiven für den Dateinamen nur 100 Zeichen zur Verfügung (Siehe auch hier.), sodass der Dateiname am ende (also Pfad+Dateiname > 100 Zeichen) einfach abgeschnitten wird. Sind Pfad+Dateiname 121 Zeichen lang, werden 21 Zeichen abgeschnitten.

    Programme wie 7-Zip (oder diverse andere) können solche langen Dateien entpacken, also muss es irgendwie gehen.

    Hat jemand Rat? Vielen Dank im Voraus.

    //edit: EDIT: LÖSUNG
    GNU tar kann mit längeren Filenames umgehen. org.apache.tools.tar.* benutzt GNU tar.
    Falls es mal jmd braucht, meine process() sieht wie folgt aus und funktioniert:
    Code:
    public void process() throws Exception {
     synchronized (lock) {
     if (outputDir == null) {
     outputDir = File.createTempFile(getClass().getSimpleName(), ".temp");
     outputDir.delete();
     outputDir.mkdir();
     outputDir.deleteOnExit();
     } 
     FileInputStream fin = new FileInputStream(inputFile);
     TarInputStream tin = new TarInputStream(fin);
     
     TarEntry tarEntry;
     while ((tarEntry = tin.getNextEntry()) != null) { 
     File destPath = new File(outputDir.toString() + File.separatorChar + tarEntry.getName());
     if (tarEntry.isDirectory()) {
     destPath.mkdir();
     } else {
     FileOutputStream fout = new FileOutputStream(destPath);
     tin.copyEntryContents(fout);
     fout.close();
     }
     }
     tin.close();
     logger.info("Extracted contents of " + inputFile + " to " + outputDir);
     }
     }
    
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.