Ja, die Welt ist hart. :bae:millinär hat gesagt.:muss ich den müll jetzt wierklich selber schreiben?
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipDir
{
private static List<File> getDataFiles(File path)
{
ArrayList<File> dataFiles = new ArrayList<File>();
for(File f : path.listFiles())
{
if(f.isDirectory())
{
//wenn File ein Ordner ist, alle Dateien aus dem Ordner hinzufügen
dataFiles.addAll(getDataFiles(f));
}
else
{
//Dateien einfach der Liste hinzufügen
dataFiles.add(f);
}
}
return dataFiles;
}
public static void zipDir(File output, File input)
{
ZipOutputStream out = null;
try
{
//ZipOutputStream für das Zipfile erstellen
out = new ZipOutputStream(new FileOutputStream(output));
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
//Kompressionslevel auf die höchste Stufe setzen
out.setLevel(9);
System.out.println("Durchsuche Verzeichnis: " + input.getPath());
//Jetzt werden alle Dateien in der for-Schleife durchgegangen
for(File f : getDataFiles(input) /* Alle Dateien für das Inputverzeichnis herausfinden */)
{
try
{
System.out.println("Füge dem Archiv hinzu: " + f.getPath().replace(input.getPath(), "").substring(1));
//InputStream für die Datei
InputStream in = new FileInputStream(f);
//Mit putNextEntry wird ein neuer Abschnitt/eine neue Datei in dem Archiv angelegt
out.putNextEntry(new ZipEntry(f.getPath().replace(input.getPath(), "").substring(1)));
//Jetzt schreiben wir in den soeben erzeugten Abschnitt
byte[] buff = new byte[1024];
int read = 0;
while((read = in.read(buff)) > 0)
{
out.write(buff, 0, read);
}
in.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
//ohne das finish() ist das Archiv defekt
out.finish();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
zipDir(new File("Der Pfad zum Outputfile"), new File("Der Ordner zum hinzufügen"));
}
}
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipDir
{
public static void writf(File path,ZipOutputStream zos,String aktuellpos){
try{
File[] allf=path.listFiles();
for(int i=0;i<allf.length;i++){
if(allf[i].isDirectory()){
ZipEntry actuall=new ZipEntry(aktuellpos+allf[i].getName()+"/");
zos.putNextEntry(actuall);
writf(allf[i],zos,actuall.getName());
}
else{
zos.putNextEntry(new ZipEntry(aktuellpos+allf[i].getName()));
FileInputStream is=null;
is=new FileInputStream(allf[i]);
int read=0;
while((read=is.read())>-1){
zos.write(read);
}
is.close();
}
}
}
catch(Exception e){
}
}
private static List<File> getDataFiles(File path)
{
ArrayList<File> dataFiles = new ArrayList<File>();
for(File f : path.listFiles())
{
if(f.isDirectory())
{
//wenn File ein Ordner ist, alle Dateien aus dem Ordner hinzufügen
dataFiles.addAll(getDataFiles(f));
}
else
{
//Dateien einfach der Liste hinzufügen
dataFiles.add(f);
}
}
return dataFiles;
}
public static void zipDir(File output, File input)
{
ZipOutputStream out = null;
try
{
//ZipOutputStream für das Zipfile erstellen
out = new ZipOutputStream(new FileOutputStream(output));
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
//Kompressionslevel auf die höchste Stufe setzen
out.setLevel(3);
System.out.println("Durchsuche Verzeichnis: " + input.getPath());
//Jetzt werden alle Dateien in der for-Schleife durchgegangen
for(File f : getDataFiles(input) /* Alle Dateien für das Inputverzeichnis herausfinden */)
{
try
{
System.out.println("Füge dem Archiv hinzu: " + f.getPath().replace(input.getPath(), "").substring(1));
//InputStream für die Datei
InputStream in = new FileInputStream(f);
//Mit putNextEntry wird ein neuer Abschnitt/eine neue Datei in dem Archiv angelegt
out.putNextEntry(new ZipEntry(f.getPath().replace(input.getPath(), "").substring(1)));
//Jetzt schreiben wir in den soeben erzeugten Abschnitt
byte[] buff = new byte[1024];
int read = 0;
while((read = in.read(buff)) > 0)
{
out.write(buff, 0, read);
}
in.close();
out.closeEntry();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
//ohne das finish() ist das Archiv defekt
out.finish();
out.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void zip(File output, File input) {
try {
ZipOutputStream zoss=new ZipOutputStream(new FileOutputStream(output));
writf(input,zoss,"");
zoss.finish();
zoss.close();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
öhm...das is natürlich nicht so toll...jetzt ist die frage: warum erkennt der die neuen ordner nicht? kannst du das nochmal genau erklären? du hast also einen ordner gezippt und mit nem anderen zipprogramm entzippt?millinär hat gesagt.:schlechte nachrichten es ist nicht 100% kompatiebel bei windows funktioniert es aber bei linux erkennt er die neuen ordner nicht.
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipDir
{
private static ArrayList getDataFiles(File path)
{
ArrayList dataFiles = new ArrayList();
File f[] = path.listFiles();
for(int x = 0; x != f.length; x++)
{
if(f[x].isDirectory())
{
//wenn File ein Ordner ist, alle Dateien aus dem Ordner hinzufügen
dataFiles.addAll(getDataFiles(f[x]));
}
else
{
//Dateien einfach der Liste hinzufügen
dataFiles.add(f[x]);
}
}
return dataFiles;
}
public static void zipDir(File output, File input)
{
ZipOutputStream out = null;
try
{
//ZipOutputStream für das Zipfile erstellen
out = new ZipOutputStream(new FileOutputStream(output));
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
//Kompressionslevel auf die höchste Stufe setzen
out.setLevel(9);
System.out.println("Durchsuche Verzeichnis: " + input.getPath());
//Jetzt werden alle Dateien in der for-Schleife durchgegangen
ArrayList tmp = getDataFiles(input);
for(int x = 0; x != tmp.size(); x++)
//for(File f : getDataFiles(input) /* Alle Dateien für das Inputverzeichnis herausfinden */)
{
File f = (File)tmp.get(x);
try
{
System.out.println("Füge dem Archiv hinzu: " + f.getAbsolutePath().substring(input.getAbsolutePath().length() + 1));
//InputStream für die Datei
InputStream in = new FileInputStream(f);
//Mit putNextEntry wird ein neuer Abschnitt/eine neue Datei in dem Archiv angelegt
out.putNextEntry(new ZipEntry(f.getAbsolutePath().substring(input.getAbsolutePath().length() + 1)));
//Jetzt schreiben wir in den soeben erzeugten Abschnitt
byte[] buff = new byte[1024];
int read = 0;
while((read = in.read(buff)) > 0)
{
out.write(buff, 0, read);
}
in.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
try
{
//ohne das finish() ist das Archiv defekt
out.finish();
out.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
zipDir(new File(args[0]), new File(args[1]));
}
}