M
M8
Gast
Hallo, ich habe folgendes Problem
vor einiger Zeit habe ich einen Entzipper für TGZ Dateien geschrieben, der so aussah, dass ich zuerst die tgz-Datei auf
Platte abgelegt habe, dann diese ausgelesen, uncompressed und als tar-Datei wieder auf Platte abgelegt, dann die tar-Datei ausgelesen wieder uncompressed und an den Zielort gespeichert
anschließend hab ich die tgz und tar Datei gelöscht
jetzt möchte ich es so machen, dass ich die beiden Zwischendateien garnicht habe sondern die Inhalte über die Streams im Speicher halte
aktuell habe ich es so, dass ich das tgz-file nicht abspeichere, sondern das byte[] direkt in die methode liefere, das tarFile wird dann nochmal abgelegt, ausgelesen und wieder abgespeichert
aber eigentlich soll auch das nicht mehr passieren
aktuelle Lösung:
(nicht auf das exceptionhandling achten, hab das fast ganz gelöscht der übersicht halber)
ich habe es auch einmal versucht das tarFile auch in einem Stream zu halten, es wird dann auch entpackt, also alle entries sind richtig vorhanden, aber es ist kein Inhalt darin, ich habe also leere PDF-Dateien am Ende
hat jemand eine Idee wie ich das lösen kann ohne temporär ein file abzulegen?
wie gesagt nur habe ich das Problem, dass in meinen entpackten Dateien kein Inhalt mehr ist...
ich hoffe jemand hat ne Idee wie das funktionieren kann!
Danke schonmal
vor einiger Zeit habe ich einen Entzipper für TGZ Dateien geschrieben, der so aussah, dass ich zuerst die tgz-Datei auf
Platte abgelegt habe, dann diese ausgelesen, uncompressed und als tar-Datei wieder auf Platte abgelegt, dann die tar-Datei ausgelesen wieder uncompressed und an den Zielort gespeichert
anschließend hab ich die tgz und tar Datei gelöscht
jetzt möchte ich es so machen, dass ich die beiden Zwischendateien garnicht habe sondern die Inhalte über die Streams im Speicher halte
aktuell habe ich es so, dass ich das tgz-file nicht abspeichere, sondern das byte[] direkt in die methode liefere, das tarFile wird dann nochmal abgelegt, ausgelesen und wieder abgespeichert
aber eigentlich soll auch das nicht mehr passieren
aktuelle Lösung:
(nicht auf das exceptionhandling achten, hab das fast ganz gelöscht der übersicht halber)
Java:
private String extractArchive(byte[] documentTGZ, String destinationPfad, String suchString) {
int BUFFER = 2048;
try {
// ***Entpacken TGZ und Speichern TAR**********************
// TAR-Archiv in TEMP ablegen
String tarPfad = TEMPDIR + "\\"
+ GzipUtils.getUncompressedFilename("file");
File tar = new File(tarPfad);
OutputStream out = new FileOutputStream(tar);
InputStream is = new ByteArrayInputStream(documentTGZ);
CompressorInputStream cis = new CompressorStreamFactory()
.createCompressorInputStream("gz", is);
// Wegschreiben des TAR-Archivs
final byte[] buffer = new byte[BUFFER];
int n = 0;
while (-1 != (n = cis.read(buffer))) {
out.write(buffer, 0, n);
}
logger.debug("TarFile weggeschrieben");
out.close();
is.close();
cis.close();
// **********Entpacken TAR und Speichern der beinhalteten Dateien******
InputStream ins = new FileInputStream(tar);
ArchiveInputStream in = new ArchiveStreamFactory()
.createArchiveInputStream("tar", ins);
TarArchiveEntry entry;
while ((entry = (TarArchiveEntry) in.getNextEntry()) != null) {
if (entry.isDirectory()) {
// Hauptverzeichnis ablegen, restliche Verzeichnise darunter
// entsprechend der Struktur
File verzeichnis = new File(destinationPfad + File.separatorChar
+ entry.getName());
verzeichnis.mkdirs();
} else {
OutputStream outs = new FileOutputStream(destinationPfad
+ File.separatorChar + entry.getName());
org.apache.commons.compress.utils.IOUtils.copy(in, outs);
outs.close();
}
}
logger.debug("TarFile entpackt");
ins.close();
in.close();
tar.delete();
} catch (DiverseExceptions ex) {
throw new Exception(
"Fehler");
return destinationPfad;
}
ich habe es auch einmal versucht das tarFile auch in einem Stream zu halten, es wird dann auch entpackt, also alle entries sind richtig vorhanden, aber es ist kein Inhalt darin, ich habe also leere PDF-Dateien am Ende
hat jemand eine Idee wie ich das lösen kann ohne temporär ein file abzulegen?
Java:
private String extractArchive(byte[] documentTGZ, String destinationPfad, String suchString) {
int BUFFER = 2048;
try {
// *******Entpacken TGZ und Rüberreichen in TAR***************
OutputStream out = new ByteArrayOutputStream();
InputStream is = new ByteArrayInputStream(documentTGZ);
CompressorInputStream cis = new CompressorStreamFactory()
.createCompressorInputStream("gz", is);
// Wegschreiben des tarInhalts in OutputStream
final byte[] buffer = new byte[BUFFER];
int n = 0;
if(buffer==null) {
throw Exception("Fehler");
}
while (-1 != (n = cis.read(buffer))) {
out.write(buffer, 0, n);
}
logger.debug("Stream mit Inhalt tarFile erstellt");
out.close();
is.close();
cis.close();
// *******Entpacken TAR und Speichern der beinhalteten Dateien**********
InputStream ins = new ByteArrayInputStream(out.toString().getBytes());
ArchiveInputStream in = new ArchiveStreamFactory()
.createArchiveInputStream("tar", ins);
TarArchiveEntry entry;
// bei Verzeichnis >> erstellen, bei Dateien >> abspeichern
while ((entry = (TarArchiveEntry) in.getNextEntry()) != null) {
if (entry.isDirectory()) {
// Hauptverzeichnis ablegen,
// restliche Verzeichnise darunter entsprechend der Struktur
File verzeichnis = new File(destinationPfad + File.separatorChar
+ entry.getName());
verzeichnis.mkdirs();
} else {
OutputStream outs = new FileOutputStream(destinationPfad
+ File.separatorChar + entry.getName());
org.apache.commons.compress.utils.IOUtils.copy(in, outs);
outs.close();
}
}
logger.debug("TarFile entpackt");
ins.close();
in.close();
tar.delete();
} catch (DiverseExceptions ex) {
throw new Exception("Fehler");
}
return destinationPfad;
}
wie gesagt nur habe ich das Problem, dass in meinen entpackten Dateien kein Inhalt mehr ist...
ich hoffe jemand hat ne Idee wie das funktionieren kann!
Danke schonmal