zipArchiv byte[] einlesen und in ein neues zipFile kopieren

Saskia21

Mitglied
Hi

Ich lese ein ZipArchiv byteweise ein.
Dieses byte[] will ich wieder in ein zipArchiv umwandeln. So wie ich es gemacht habe ist es so, dass in dem ziparchiv nocheinmal das zipachriv enthalten ist, dass ich einlesen wollte, dass allerdings fehlerhaft ist und es enthält auch den eigentlichen Inhalt vom ZipArchiv
.
Java:
byte[] array = w.getDatabaseUpdate("111");
         FileOutputStream f = new FileOutputStream("c:/zip.zip");
         f.write(array);
         f.flush();
         f.close();
w.getDatabaseUpdate("111"); -> erzeugt ein Zip Archiv aus mehreren xml-dateien
-> liest das zip Archiv byteweise ein und übergibt es in einem byte[]

Eigentlich soll die Ordnerstruktur so sein:
archiv.zip
-a.xml
-b.xml
-c.xml

sie ist aber so:
archiv.zip
-blub.zip(das voher in der Methode erzeuge zip -> ist fehlerhaflt, lässt sich nicht öffnen)
-a.xml
-b.xml
-c.xml

Hoffe jemand weiß rat

LG
 
Hallo,

Code:
w.getDatabaseUpdate("111");
Ist das eine Klasse von dir? Falls ja, poste mal bitte, was diese Methode macht.

MFG

Sascha
 
Java:
public byte[] getDatabaseUpdate(String hashcode) throws IOException {
		if(hc.checkHashCode(hashcode) == true){
			File zipArchiv = zipGenerator.createZip();
			System.out.println(zipArchiv.getName());
			zipByte = changeToByte.changeToByte(zipArchiv);
			return zipByte;
		}
		return null;
	}
File zipArchiv = zipGenerator.createZip(); -> bei dem Aufruf bekomme ich ein zipArchiv mit mehreren xml-dateien. (Wäre zu viel es hier zu posten)

zipByte = changeToByte.changeToByte(zipArchiv); -> wird das File byteweise eingelesen
Java:
public byte[] changeToByte(File file) throws IOException {
	
	          final ByteArrayOutputStream bo;
	
	          final long length = file.length();
	 
	          if (length < Integer.MAX_VALUE) {
	        	  bo = new ByteArrayOutputStream((int) length);
	
	          } else {

	              bo = new ByteArrayOutputStream(Integer.MAX_VALUE);
	          }
	          final FileInputStream in = new FileInputStream(file);
	          int c;
	          while ((c = in.read()) != -1) {
	              bo.write(c);
	          }
	          in.close();
	          bo.close();
	          final byte[] byteArray = bo.toByteArray();
	          return byteArray;
	      }
 
Hast du mal kontrolliert, ob die Zip-Datei, die vom zipGenerator erstellt wird, schon richtig ist?

MFG

Sascha
 
Ja die ist richtig. Es geht jetzt halt nur darum, wie ich diese date korrekt byteweise einlesen kann bzw. byteweise kopieren kann
 
Danke das ist total nett von dir. Also nochmal, dass die Frage klarer wird:
ich habe ein Zip Archiv erstellt.
Dieses ZipArchiv lese ich byteweise in ein byte[] ein.
Durch dieses byte[] will ich ein neues zip Achiv erstellen.
Die beiden Archive sollen vom Aufbau und Inhalt identisch sein, nur der Speicherort und ggf. die Namen sind unterschiedlich.
 
Also ich hab kein Archiv erstellt, sondern ein vorhandenes genommen.

Java:
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;


public class ZipByteExample
{

  public static void main(String[] args) throws Exception
  {
    File zipFile = new File("I:/src.zip");
    
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    FileInputStream fis = new FileInputStream(zipFile);
    
    int i = 0;
    while((i=fis.read())!= -1){
      bos.write(i);
    }
    fis.close();
    bos.close();
    byte[] zipFileBytes = bos.toByteArray();
    
    FileOutputStream fos = new FileOutputStream("I:/teste.zip");
    fos.write(zipFileBytes);
    fos.flush();
    fos.close();
    
  }
  
}

Warum möchtest du es aber als ByteArray einlesen, hat das einen bestimmten Grund?

MFG

Sascha
 
Ja, es werden Daten vom Server zum Client durch Webservice gesendet. Und diese Dateien übergebe ich byteweise. Hätte das auch mit soap attachment machen können, aber das hat mir immer fehler geschmießen....
Deshalb hatte man mir geraten das so zu machen.

LG
 
@Sascha: Warum postest du nochmal das was schon dasteht? ;)

@Saskia: Ich nehme mal an dass deine Methode alles packt was in deinem Verzeichnis liegt, also neben deinen XML-Datei auch alte zip-Dateien die da noch rumliegen. Kann das sein?
 
Zurück