TAR-Archive herstellen

Status
Nicht offen für weitere Antworten.
D

D.ark-A.ngel

Gast
Hallo,

Ich möchte ein Verzeichnis, das auch Unterverzeichnisse haben kann, TAR-komprimieren. Dazu nutze ich das Package com.ice.tar, das Public Domain ist (http://www.trustice.com/java/tar). Aus dem Usenet weiß ich bereits, dass dieses Package beim TAR-Archiv-Erzeugen immer den ganzen Pfad, also auch den oberhalb des zu "packenden" Verzeichnisses mit ins TAR-Archiv schreibt. (Das möchte ich nicht unbedingt.) Allerdings geschieht das bei dem von mir verwendeten Code eben auch nicht, im Gegenteil -- bei fast jeder zu packenden Datei wird ein anderes, scheinbar zufälliges "Stück von dem Pfad" mitkodiert, so dass die resultierende Struktur im TAR-Archiv völlig unsinnig ist. Vielleicht hat jemand mit diesem TAR-Package Erfahrungen und kann mir helfen? Hier meine TAR-Klasse:

Code:
import java.io.*;
import com.ice.tar.*;

public class TARexport {
    
    public TARexport(File inputDirectory)
        throws IOException, FileNotFoundException {
       
                 // TAR-Datei spezifizieren
                // (hier noch Verzeichnis angeben, wenn gewünscht!)
            File outputFile = new File("output.tar");
       
            // Streams und Schleifenvariablen INIT
            TarOutputStream tarOS = new TarOutputStream(
                    new FileOutputStream(outputFile));
            FileInputStream in;
            byte buffer[] = new byte[1024];
            int content = 0;
           
            // FOR-Schleife, die alle Dateien aus allen
            // Unterverzeichnissen einbezieht
            File alleDateien[] = inputDirectory.listFiles();
            for (int i = 0; i < alleDateien.length; i++)
            {
               // Datei gefunden? An TAR-Stream anfügen!
               if (!(alleDateien[i].isDirectory())) {
                   in = new FileInputStream(alleDateien[i]);
                   tarOS.putNextEntry(new TarEntry(alleDateien[i]));
                   do {
                       content = in.read(buffer);
                       if (content != -1)
                          tarOS.write(buffer, 0, content);
                    } while (content != -1);
                   tarOS.closeEntry();
                   in.close();
               } else {
               // Verzeichnis gefunden? Unterverzeichnis durchsuchen!
               // Dort enthaltene Dateien an TAR-Stream anfügen!
                   File alleUnterverzDateien[] = alleDateien[i].listFiles();
                   for (int j = 0; j < alleUnterverzDateien.length; j++)
                   {
                      in = new FileInputStream(alleUnterverzDateien[j]);
                      tarOS.putNextEntry(new TarEntry(alleUnterverzDateien[j]));
                      do {
                          content = in.read(buffer);
                          if (content != -1)
                                 tarOS.write(buffer, 0, content);
                          } while (content != -1);
                      tarOS.closeEntry();
                      in.close();
                   }
               }
            }
            tarOS.close();
    }
}

Anmerkung: Einige Anweisungsblöcke wiederholen sich. Ich habe hier weder Schleife noch Rekursion einsetzen wollen, weil bei meiner Anwendung immer nur eine Ebene an Unterverzeichnissen existieren kann (diese haben also keine weiteren Unterverzeichnisse). Und genau dadurch scheint auch die Pfadkomprimierung so eigenartig zu verlaufen... was mir zum Teil ja gefällt, ich will ja den Pfad oberhalb des Verzeichnisses nicht mit"komprimieren". Hat jemand hierfür eine Lösung gefunden?
Falls jemand das Apache-TAR für dieses Problem ausprobiert hat (oder noch ein anderes TAR-Package kennt) und das funktioniert, würde ich mich auch über diesen Hinweis freuen...

Viele Grüße,
D.ark-A.ngel
 

thE_29

Top Contributor
<ot>Ich kenne TAR von der Linux Welt und kann dir sagen, das TAR alleine dort überhaupt keine Kompression ist, sondern einfach nur ins Archiv laden...</ot>
 
D

D.ark-A.ngel

Gast
<ot2> TAR-Archive haben quasi den Kompressionsfaktor 0, dessen bin ich mir bewusst. Aus diesem Grunde schrieb ich "komprimieren" auch in Anführungsstrichen </ot2>
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben