Zip multiple Dateien und Verzeichnissen nach einem ausgang, bitte Helfen

brusli

Grünschnabel
Hallo Gemeinde,
ich habe folgende Probleme,
1. Ich möchte multiple zip files und directory mit dem package java.util.zip.*; zippen z.B : c:\\Programme+c:\\test.txt+c:\\andereVerzeichnis = ausgang.zip oder Dir+Dir+Dateien+Dateien = ausgang.zip. Bis jetzt kann ich nur zippen entweder nur Verzeichnisse oder Dateien, ich kann nicht gemischt machen, Sie können mein Code ansehen unten.
2. Wie kann ich die grösse gezippte Dateien oder Verzeichnissen beschränken auf 700 MB (Split nach Volume and Merge wie winzip)
3. Wie kann ich inkrementielle Verfahren benutzen, dh die alte Dateien oder Verzeichnisse soll aktualisiert werden zum Zweck der Sicherung

Hier ist mein Code in Bezug auf 1. Frage

Zip nur Dateien
Code:
import java.util.zip.*;
import java.io.*; 
public class zip_files
{
public static void main(String[] args) throws IOException
{ 
File[] all = {new File("C:\\cdrecord.exe"), new File("C:\\mkisofs.exe")}; 
createZip(new File("c:\\output.zip"),all); 
}
public static void createZip(File zipFileName,File[] selected) 
{ 
try 
{ 
byte[] buffer = new byte[1024]; 
ZipOutputStream out = new ZipOutputStream(new 
FileOutputStream(zipFileName)); 
out.setLevel(Deflater.DEFAULT_COMPRESSION); 
for (int i = 0; i < selected.length; i++) 
{ 
FileInputStream in = new FileInputStream(selected[i]); 
out.putNextEntry(new ZipEntry(selected[i].getPath())); 
int len; 
while ((len = in.read(buffer)) > 0) 
{ 
out.write(buffer, 0, len); 
} 
out.closeEntry(); 
in.close(); 
}
out.close(); 
} 
catch (IllegalArgumentException iae) 
{ 
iae.printStackTrace(); 
} 
catch (FileNotFoundException fnfe) 
{ 
fnfe.printStackTrace(); 
} 
catch (IOException ioe) 
{ 
ioe.printStackTrace(); 
} 
} 
}
Zip nur Verzeichnis
Code:
import java.util.zip.*;
import java.io.*; 
public class zip_dir_all
{
public static void main(String[] args) throws IOException
{ 
String dirpath = "c:\\jtutor";
String ZipName = "c:\\output.zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(ZipName));
zipdirectory(dirpath,zos); 
zos.close(); 
}
public static void zipdirectory(String dirpath, ZipOutputStream zos) throws IOException
{
File f = new File(dirpath);
String[] flist = f.list();
for(int i=0; i<flist.length; i++)
{
File ff = new File(f,flist[i]);
if(ff.isDirectory())
{
zipdirectory(ff.getPath(),zos); 
continue;
}
String filepath = ff.getPath();
ZipEntry entries = new ZipEntry(filepath);
zos.putNextEntry(entries);
FileInputStream fis = new FileInputStream(ff);
int buffersize = 1024;
byte[] buffer = new byte[buffersize];
int count;
while((count = fis.read(buffer)) != -1)
{
zos.write(buffer,0,count); 
}
fis.close();
}
}
}

Zip nur sub Verzeichnis
Code:
import java.util.zip.*;
import java.io.*; 
public class zip_dir
{
public static void main(String[] args) throws IOException
{ 
File[] alle = {new File("c:\\ftpjakarta")}; 
String dirpath = "c:\\jtutor";
String ZipName = "c:\\output.zip";
zipdirectory(dirpath,ZipName); 
 
}
public static void zipdirectory(String dirpath, String ZipName) throws IOException
{
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(ZipName));
File f = new File(dirpath);
String[] flist = f.list();
int buffersize = 1024;
byte[] buffer = new byte[buffersize];
int count;
for(int i=0; i<flist.length; i++)
{
File ff = new File(f,flist[i]);
if(ff.isDirectory())
continue;
String filepath = ff.getPath();
ZipEntry entries = new ZipEntry(filepath);
zos.putNextEntry(entries);
FileInputStream fis = new FileInputStream(ff);
while((count = fis.read(buffer)) != -1)
{
zos.write(buffer,0,count); 
}
fis.close();
}
zos.close();
}
}
Ich bedanke mich für eure Hilfe, Sie können auch die Lösung per E-mail schicken an : brusli@excite.com
 
Hallo!

Ein Verzeichnis inklusive der enthaltenen Daten kannst du z.Bsp so zippen:
Code:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

/*
 * Created on 16.01.2005@16:03:53
 *
 * TODO Licence info
 */

/**
 * @author Administrator
 *
 * TODO Explain me
 */
public class ZipTest {

    public static void main(String[] args) {
        File file = new File("c:/totalcmd");

        try {
            ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(
                    new FileOutputStream("c:/totalcmd.zip")));
            File f = file;
            fileWalk(f, zos);
            zos.finish();
            zos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void fileWalk(File f, ZipOutputStream zos) {
        if (f.isDirectory()) {
            File[] files = f.listFiles();
            for (int i = 0; i < files.length; i++) {
                fileWalk(files[i], zos);
            }
        } else {
            try {
                ZipEntry entry = new ZipEntry(f.getCanonicalPath());
                zos.putNextEntry(entry);
                BufferedInputStream br = new BufferedInputStream(
                        new FileInputStream(f));
                byte[] buffer = new byte[4096];
                int len;
                while ((len = br.read(buffer)) > 0) {
                    zos.write(buffer);
                    zos.flush();
                }
                zos.closeEntry();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Gruß Tom
 
Danke Thomas,

die Lösung habe ich auch daoben schon geschrieben, was ich möchte, dass man Verzeichnis(directory)+irgenwelche text datei(z.B test.txt) zusammenpacken soll zum einem Ausgang. Für deine Lösungen bedanke ich mich sehr.

Hier ist das gleich wie dein Code gemacht hat, der Unterschied nur dass ich rekursive Verfahren benutzt habe.

Zip nur Verzeichnis
Code:
import java.util.zip.*;
import java.io.*; 
public class zip_dir_all
{
public static void main(String[] args) throws IOException
{ 
String dirpath = "c:\\jtutor";
String ZipName = "c:\\output.zip";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(ZipName));
zipdirectory(dirpath,zos); 
zos.close(); 
}
public static void zipdirectory(String dirpath, ZipOutputStream zos) throws IOException
{
File f = new File(dirpath);
String[] flist = f.list();
for(int i=0; i<flist.length; i++)
{
File ff = new File(f,flist[i]);
if(ff.isDirectory())
{
zipdirectory(ff.getPath(),zos); 
continue;
}
String filepath = ff.getPath();
ZipEntry entries = new ZipEntry(filepath);
zos.putNextEntry(entries);
FileInputStream fis = new FileInputStream(ff);
int buffersize = 1024;
byte[] buffer = new byte[buffersize];
int count;
while((count = fis.read(buffer)) != -1)
{
zos.write(buffer,0,count); 
}
fis.close();
}
}
}
 
Zurück