Ordner Zippen

LucasW

Mitglied
Hallo ich würde gerne einen Ordner mit Unterordner zippen. Jedoch bekomme ich immer eine Stackoverflow Exception bei:
zip(outZip, f, f.getName());

Java:
public void zip(ZipOutputStream outZip, File directory, String subdir) throws IOException
    {
        BufferedInputStream origin = null;
        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outZip));
        File f = new File("C:\\Users\\werner\\Desktop\\Testordner");
        File files[] = f.listFiles();
        for (int i = 0; i< files.length; i++)
        {
            if(f.isDirectory())
            {
                zip(outZip, f, f.getName());
            }
            else
            {
                // Dateien hinzufügen zipEntry
                String name = null;
                if (subdir.length() > 0)
                {
                    name = subdir + "\\" +f.getName();
                }
                else
                {
                    name = f.getName();
                    FileInputStream fi = new FileInputStream(files[i]);
                    byte data[] = new byte[BUFFER];

                   
                    origin = new BufferedInputStream(fi, BUFFER);
                    ZipEntry entry = new ZipEntry(files[i].getName());
                    out.putNextEntry(entry);
                    System.out.println(entry.toString());
                    int count;
                   while((count = origin.read(data, 0, BUFFER)) != -1)
                    {
                        out.write(data, 0, count);
                    }
                    origin.close();
            }}
        }   
    
    }
 
Du erzeugst immer ein neues File Objekt von deinem Testordner am Desktop. Durchsuchst alle Dateien und Ordner von "Testordner" und rufst bei gefunden Ordner wieder deine Methode "zip" auf!
Diese verwendet nicht den übergebenen Parameter sondern wieder den "Testordner" am Desktop usw.

Irgendwann ist der Stack voll weil deine Methode "zip" endlos aufgerufen wird 😉
 

Neue Themen


Zurück
Oben