Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read zip file as byte array and then convert the byte array to back to zip file?

I have tried using this code for converting a ZIP file to a byte array:

private static byte[] readZipFile(String zipFnm)
// read in fnm, returning it as a single string
{

  FileInputStream fileInputStream=null;

  File file = new File(zipFnm);

  byte[] bFile = new byte[(int) file.length()];

  try{
    //convert file into array of bytes
    fileInputStream = new FileInputStream(zipFnm);
    fileInputStream.read(bFile);
    fileInputStream.close();
  }catch(Exception e){
    e.printStackTrace();
  }
  return bFile;
}  

and this code for converting the byte array to back to ZIP, by calling writeByteToZip(fnm + ".zip");

private static String writeByteToZip(String outFnm)
{
  try {
    FileOutputStream fileOuputStream = new FileOutputStream(outFnm); 
    fileOuputStream.write(bFile);
    fileOuputStream.close();            

  } catch ( IOException iox ){
    iox.printStackTrace();
  }
  return outFnm;
}  // end of writeByteToZip()

What am I doing wrong? I get correct byte length of zip using

byte[] bzip = readZipFile(zipFnm);

int totalLen1 = bzip.length;
System.out.println("Total byte length of zip: " + totalLen1);

All I get is a zero size zip file and run time error in Netbeans as:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.io.FileOutputStream.write(FileOutputStream.java:305)
    at steg.Steg.writeByteToZip(Steg.java:402)
    at steg.Steg.save(Steg.java:292)
    at steg.frame1.jButton2ActionPerformed(frame1.java:349)
    at steg.frame1.access$300(frame1.java:24)
    at steg.frame1$4.actionPerformed(frame1.java:172)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2713)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
like image 987
Laishram Pilot Avatar asked Oct 22 '22 11:10

Laishram Pilot


1 Answers

The problem is probably the variable bFile in writeByteToZip(). Make sure it is not null.

In the future, when you post code which throws an exception, mark the line where the exception happens with a comment (// <-- NullPointerException here)

like image 178
Aaron Digulla Avatar answered Nov 01 '22 14:11

Aaron Digulla