S
Shlyakh
Guest
Ich übe gerade IO-Streams und habe mal überlegt eine Klasse zu schreiben, die einen Zipordner auspackt und dessen Files in ein Verzeichnis schreibt.
Ich Instantiiere die Klasse, die das tun soll inner Main-Mathode (MainX, da Testversion).
Hier die Klasse:
Kompilieren tut es. Das Problem ist, dass das Verzeichnis nicht gemacht wird, und dass in selbiges auch nix geschrieben wird. Habe ich da beim Fileoutputstream nicht verstanden?
Ich Instantiiere die Klasse, die das tun soll inner Main-Mathode (MainX, da Testversion).
Code:
import java.util.zip.*;
import java.util.*;
import java.io.*;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.*;
import org.apache.commons.io.*;
class MainX
{
public static void main(String[] args) throws FileNotFoundException, IOException, ArchiveException
{
ZIPopenerX zo = new ZIPopenerX();
//Ja, ich benutze Windows und so sieht mein Pfad zu dem Ordner aus, den ich auspacken will...
zo.unZip(new ZipFile("C:\\Programme\\Java\\jdk1.7.0_15\\bin\\ordner.zip"));
}
}
Hier die Klasse:
Code:
import java.util.*;
import java.io.*;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.apache.commons.compress.archivers.*;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.io.*;
class ZIPopenerX extends UNZIP{
HashMap<String,File> unZip( ZipFile inputFile) throws FileNotFoundException, IOException, ArchiveException
{
//Ich will die aus der ZIPDatei die Ordner auch in diese HashMap setzen, aber das is nicht das Problem.
HashMap<String,File> unzippedFiles = new HashMap<String,File>();
//Ich willo alle Entris meiner ZIP-Inputdatei schlussendlich alle in einen Ordner schreiben.
File outputDir = new File("C:\\Programme"); outputDir.mkdir();
//Und hier mache ich mir einen ZIP-Inputstream und wrappe einen ZipArchiveInputSTream drumrum.
ZipInputStream is = new ZipInputStream(new FileInputStream(new File(inputFile.getName())));
ZipArchiveInputStream debInputStream = (ZipArchiveInputStream) new ArchiveStreamFactory().createArchiveInputStream("zip", is);
ZipArchiveEntry entry = null;
while ((entry = (ZipArchiveEntry)debInputStream.getNextEntry()) != null){
//Jede Datei in meiner ZIP-Datei mache ich so zu einem File-Objekt.
File outputFile = new File(entry.getName());
if (entry.isDirectory()) {
if (!outputFile.exists()) {
if (!outputFile.mkdirs()) {
throw new IllegalStateException(String.format("Couldn't create directory %s.", outputFile.getAbsolutePath()));
}
}
}
else { //Hier will ich den Ordner mit den Entries vollschreiben über einen Outputstream.
//Das scheint nicht zu klappen. Ich kann nicht mal den Ordner finden.
OutputStream outputFileStream = new FileOutputStream(outputDir);
IOUtils.copy(debInputStream, outputFileStream);
outputFileStream.close();
}
//*********Ab hier isses eigentich uninteressant und für mein Problem irrelevant.
unzippedFiles.put(outputFile.getName().substring(0,outputFile.getName().length()-4),outputFile);
}
debInputStream.close();
System.out.println(unzippedFiles);//--> Leer :(
return unzippedFiles;
}
}
Kompilieren tut es. Das Problem ist, dass das Verzeichnis nicht gemacht wird, und dass in selbiges auch nix geschrieben wird. Habe ich da beim Fileoutputstream nicht verstanden?
Code:
import java.util.*;
import java.io.*;
import java.util.zip.*;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.*;
import org.apache.commons.io.*;
abstract class UNZIP
{
abstract HashMap<String,File> unZip(final ZipFile inputFile) throws FileNotFoundException, IOException, ArchiveException;
}