How to create a zip file from multiple image files

I am trying to create a zip file from multiple image files. I managed to create a zip file of all the images, but somehow all the images were hung up to 950 bytes. I don’t know what is happening here, and now I can’t open the images that were compressed into this zip file.

Here is my code. Can someone tell me what is going on here?

String path="c:\\windows\\twain32"; File f=new File(path); f.mkdir(); File x=new File("e:\\test"); x.mkdir(); byte []b; String zipFile="e:\\test\\test.zip"; FileOutputStream fout=new FileOutputStream(zipFile); ZipOutputStream zout=new ZipOutputStream(new BufferedOutputStream(fout)); File []s=f.listFiles(); for(int i=0;i<s.length;i++) { b=new byte[(int)s[i].length()]; FileInputStream fin=new FileInputStream(s[i]); zout.putNextEntry(new ZipEntry(s[i].getName())); int length; while((length=fin.read())>0) { zout.write(b,0,length); } zout.closeEntry(); fin.close(); } zout.close(); 
+8
java file zip fileinputstream zipoutputstream
source share
2 answers

Change this:

 while((length=fin.read())>0) 

:

 while((length=fin.read(b, 0, 1024))>0) 

And set the buffer size to 1024 bytes:

 b=new byte[1024]; 
+9
source share

This is my zip function, which I always use for any file structures:

 public static File zip(List<File> files, String filename) { File zipfile = new File(filename); // Create a buffer for reading the files byte[] buf = new byte[1024]; try { // create the ZIP file ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile)); // compress the files for(int i=0; i<files.size(); i++) { FileInputStream in = new FileInputStream(files.get(i).getCanonicalName()); // add ZIP entry to output stream out.putNextEntry(new ZipEntry(files.get(i).getName())); // transfer bytes from the file to the ZIP file int len; while((len = in.read(buf)) > 0) { out.write(buf, 0, len); } // complete the entry out.closeEntry(); in.close(); } // complete the ZIP file out.close(); return zipfile; } catch (IOException ex) { System.err.println(ex.getMessage()); } return null; } 
+14
source share

All Articles