Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken

UnterKind

Mitglied
Hallo,

ich bin momentan dabei ein Programm zu schreiben das tar und tar.gz Archive entpacken soll. Ich will in einer Klasse die Funktion rekursiv aufrufen, aber das ist erstmal ohne Interesse da mein Archiv Problem momentan überwiegt.
Ich bekomme wenn ich das Programm nutze beschädigte .tar.gz dateien ausgeworfen.
Und was noch von interesse seien könnte ich nutze das common compress von Apache.

Noch was zur Archivstruktur es ist ein .tar Archiv aus der zwei .tar.gz Archive rauskommen, diese sind jedoch immer beschädigt es sei denn ich entpacke über Winrar.

lg

[JAVA=42]package zipLOGs;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;


public class Entpacken {
final static int BUFFER = 2048;
static String quellPfad=null;
static int i=0;
final static String ZIELPFAD="C:\\Users\\kedik_c\\Desktop\\Teszip ordner\\";


@SuppressWarnings({ "unused", "null" })
public static void entpacken(String quellPfad) throws IOException{

FileInputStream fin=null;
BufferedInputStream in=null;
GzipCompressorInputStream gzIn=null;
TarArchiveInputStream tarIn=null;
TarArchiveEntry entry=null;
Boolean tarGz=false;

File ordner=new File(quellPfad);
File[] fileArray=ordner.listFiles();//Beinhaltet die Objekte im Ordner


String quellDatei = fileArray[0].toString();

System.out.println(quellDatei);
if(fileArray==null)
System.out.println("Es fehlen die berichtigungen um auf den Ordner zuzugreifen.");


if (quellDatei.endsWith(".tar.gz")) {
try {
tarGz = true;// Flag zum entscheiden was am ende der Methode
// geschlossen werden soll und was nicht.
fin = new FileInputStream(quellDatei);
in = new BufferedInputStream(fin);
gzIn = new GzipCompressorInputStream(in);
tarIn = new TarArchiveInputStream(gzIn);
} catch (FileNotFoundException e) {
fin.close();
in.close();
tarIn.close();
gzIn.close();
e.printStackTrace();
}
} else {
try {
fin = new FileInputStream(quellDatei);
in = new BufferedInputStream(fin);
tarIn = new TarArchiveInputStream(in);
} catch (FileNotFoundException e) {
fin.close();
in.close();
tarIn.close();
e.printStackTrace();
}
}//Diese if else anweisung ermöglich tar und tar.gz in dieser Methode zu entpacken.


while ((entry = (TarArchiveEntry) tarIn.getNextEntry()) != null) {//Let it rest, here happens too much Magic too handle.
System.out.println("Extracting: "+entry.getName());

if(entry.isDirectory()){ //Erzeugt einen Ordner.
File f = new File(quellDatei+entry.getName());
f.mkdir();
}else{ //Erzeugt das im Archiv gespeicherte Archiv.
int count;
byte data[] = new byte [BUFFER];
FileOutputStream fos = new FileOutputStream(ZIELPFAD + entry.getName());
BufferedOutputStream dest = new BufferedOutputStream(fos,BUFFER);
while ((count = tarIn.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
fos.close();
dest.close();
}
}
fin.close();
in.close();
tarIn.close();
if(tarGz)
gzIn.close();
System.out.println("Archive geöffnet");
}

}
[/code]
 
Voll toll, hat mir ja so krass geholfen danke das du für mich googlest nein echt jetzt du bist der Hammer!

Hat sich trotz dieser großartigen Hilfe mit google von selbst geklärt. Ich hab noch was gefunden wo ohne eine konstante gearabeitet wurde. war dann im großen und ganzen die änderung von 5 Zeilen.


Java:
else{													//Erzeugt das im Archiv gespeicherte Archiv.
				int count = (int) entry.getSize();
				byte data[] = new byte[count];
				FileOutputStream fos = new FileOutputStream(ZIELPFAD + entry.getName());
				BufferedOutputStream dest = new BufferedOutputStream(fos,count);				
				while ((count = tarIn.read(data, 0, count)) != -1) {
					dest.write(data, 0, count);
				}
				fos.close();
				dest.close();
			}
 
Zuletzt bearbeitet:
Sehr gerne. :toll:
Das ist aber kein Grund zur Unfreundlichkeit. Was ich damit bezwecken wollte, ist dass es für so etwas genug Libs gibt, die du auch kommerziell verwenden darfst.

Z.B. Zip4J
 
ist die Lib die ich benutze.

Dazu kommt das du total an meiner Fragestellung vorbeigangen bist und mit einem klugs******erischem lmgtfy angekommen bist. Dann wäre ich etwas freundlicher gewesen 😉

Nein, ich habe dir geholfen. Hättest du einfach Google genutzt, hättest du andere Libs verwenden können.
Zudem möchte ich sagen, dass es egal ist, was für eine Antwort du bekommst, selbst wenn sie (in deinen Augen) nicht konstruktiv ist. Man kann dennoch dankbar sein.
 
Also, du liest dir offensichtlich nicht mal das Topic durch, ignorierst alles was in meinem Text steht. Und machst einen auf Klugs******er mit lmgtfy, und ich soll dir also dankbar sein? cool story bro netter troll bist du
 
ich würd einfach mal spontan behaupten das du halt nicht direkt vom TarInputStream lesen darfst sondern dir erstmal ein TarEntry holen musst und dieses dann einlesen kannst ... aber auf apache hab ich noch nie große stücke gehalten
 

Zurück
Oben