Nach Zippen sind XML-Dateien Müll

Java?

Grünschnabel
Hi,

ich zeuge mit java.io.* ein Zip-Archiv. Nach dem Packen ist die erzeugte Datei unwesentlich kleiner als die manuell gepackte. Die Kompressionrate ist auf 0 gesetzt.

Hauptbestandteil des Archives sind XML-Dokumente, die haben zwar die gleiche Größe, wie die ungepackten, aber sind inhaltslos bzw. zeigen nur Kästchen an.

Hier ist der Code:

Code:
package gui;
import java.io.*;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFiles {	
	private ZipOutputStream cpZipOutputStream = null;	
    public String strSource = "c:/temp/zip";
    public String strTarget = "c:/temp/all.zip";
    private static long  size          = 0;
	private static int   numOfFiles    = 0;
	public static final int STORED = ZipEntry.STORED;
	
	
	public void zip(){		
		try		{			
			File cpFile = new File (strSource);						
			if (!cpFile.isFile() && !cpFile.isDirectory() ) {			
				System.out.println("\nSource file/directory Not Found!");			
				return;		
			}			
			FileOutputStream fos = new FileOutputStream(strTarget);
			cpZipOutputStream = new ZipOutputStream(fos);		
			cpZipOutputStream.setLevel(0);		
			zipFiles( cpFile);		
			cpZipOutputStream.finish();		
			cpZipOutputStream.close();		
			
		}	catch (Exception e){			
				e.printStackTrace();		
		}	
	}	
	private void  zipFiles(File cpFile) {		
		if (cpFile.isDirectory()) {	
	
			File [] fList = cpFile.listFiles() ;			
			for (int i=0; i< fList.length; i++){				
				zipFiles(fList[i]) ;			
			}		
		} else {			
			try {		
				
				size += cpFile.length();

				numOfFiles++;
				String strAbsPath = cpFile.getPath();
				String strZipEntryName = strAbsPath.substring(strSource.length(), strAbsPath.length());				
				byte[] b = new byte[ (int)(cpFile.length()) ];				
										
				ZipEntry cpZipEntry = new ZipEntry(strZipEntryName);				
				cpZipOutputStream.putNextEntry(cpZipEntry );				
				cpZipOutputStream.write(b, 0, (int)cpFile.length());				
				cpZipOutputStream.closeEntry();
			} catch (Exception e) {				
				e.printStackTrace();			
			}		
		}	
	}
}

Bis dann Java?
 
Hallo,

das liegt ja auch daran, dass du nur ein leeres byte-Array in den OutputStream schreibst. Du solltest dein Byte-Array vielleicht mit einem InputStream befüllen.

MFG

zEriX
 
Zurück