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
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]
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]