Create ZIP File using Java Code

 


Create ZIP File using Java Code



We seen how to unzip a ZIP file using Java code in our earlier tutorial, now we will see how to create a ZIP file using Java code in this tutorial. Below sample code will read list of files in a folder and zip file name as input parameters. 



import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class CreateZIPFile {

 public static void main(String argv[]) {
  // List of files in a folder to zip
  String filesPath = "D:\\filesfolder";
  // ZIP file name and path to create
  String zipFileName = "D:\\myZipFile.zip";
  
  createZIPFile(filesPath, zipFileName);
 }
 
 public static void createZIPFile(String filesPath, String zipFileName){

  try {
  
   FileOutputStream dest = new FileOutputStream(zipFileName);
   ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));

   byte buffer[] = new byte[1024];
   File file = new File(filesPath);
   String files[] = file.list();
   System.out.println("No. of files to ZIP : "+files.length);
   BufferedInputStream bis = null;
   for (int i = 0; i < files.length; i++) {
    FileInputStream fi = new FileInputStream(filesPath+ "\\"+ files[i]);
    bis = new BufferedInputStream(fi, 1024);
    ZipEntry entry = new ZipEntry(files[i]);
    out.putNextEntry(entry);
    int count;
    while ((count = bis.read(buffer, 0, 1024)) != -1) {
     out.write(buffer, 0, count);
    }
    bis.close();
   }
   out.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}









Unzip a ZIP File using Java Code

 


Unzip a ZIP File using Java Code


In this tutorial we will see about unzipping a Zip file using Java code. Below example will gives you the code to unzip a zip file by taking zip file and output folder path as input parameters. 



import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.Enumeration;

public class UnZip {

 public static final void main(String[] args) {

  // Zip file path
  String zipFile = "D:\\myZipFile.zip";

  // Output folder to save the unzip files
  String outputFolder = "D:\\unzipfolder\\";
  
  unzipFile(zipFile, outputFolder);

 }
 
 public static void unzipFile(String zipFile, String outputFolder){
  
  ZipFile zFile = null;

  try {
   zFile = new ZipFile(zipFile);
   Enumeration zEntries = zFile.entries();

   while (zEntries.hasMoreElements()) {
    ZipEntry zipEntry = (ZipEntry) zEntries.nextElement();

    // Check for Directory or not
    if (zipEntry.isDirectory()) {
     // Creating directory
     (new File(zipEntry.getName())).mkdir();
     continue;
    }

    // Unzipping files
    createUnzipFile(zFile.getInputStream(zipEntry),
      new BufferedOutputStream(new FileOutputStream(
        outputFolder + zipEntry.getName())));
   }
   zFile.close();
  } catch (IOException e) {
   e.printStackTrace();
  
  } 
 }

 public static final void createUnzipFile(InputStream iStream,
   OutputStream oStream) {
  try {
   byte[] buffer = new byte[1024];
   int len;
   while ((len = iStream.read(buffer)) >= 0)
    oStream.write(buffer, 0, len);

  iStream.close();
  oStream.close();
  } catch (Exception e) {
   e.printStackTrace();
 
  } 
 }
}






DOM and SAX Parser


In this tutorial we will see about DOM and SAX parser along with simple Java code to parse the XML. 

Common XML document which we are going to use for both DOM and SAX parser are 


SAMPLE XML:
<?xml version="1.0" encoding="UTF-8"?>
<organization>
 <employee mode="permanent">
  <name>John</name>
  <empid>1234</empid>
  <designation>SE</designation>
  <technology>Java</technology>
 </employee>
 <employee mode="contract">
  <name>David</name>
  <empid>4545</empid>
  <designation>Manager</designation>
  <technology>.NET</technology>
 </employee>
</organization>


DOM Parser:

Document Object Model (DOM) parser will creates a complete tree structure in memory from the XML provided and reads each node values as and when required. 

The advantage of DOM parser is provided with lot of rich functionality where developers can make use without any additional coding. Also when the document loaded into memory developers can access any part of the DOM tree and can modify.

Disadvantages are need more memory in case of huge document in size. 
it takes a little bit longer to learn how to work with it.



DOM Parser for above XML document:



import java.io.File;
import java.io.IOException;
import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;

public class DOMParser {

 public static void main(String[] args) {
  String file = "document.xml";
  
  parseXMLUsingDOM(file);
 }
 
 public static void parseXMLUsingDOM(String file){
  
  try {
   DocumentBuilderFactory builderFac = DocumentBuilderFactory.newInstance();
   DocumentBuilder builder = builderFac.newDocumentBuilder();
      Document doc = builder.parse(new File(file));

      System.out.println ("ROOT: " + doc.getDocumentElement().getNodeName());
            NodeList list = doc.getElementsByTagName("employee");
            System.out.println("No. Of Employees: " + list.getLength());
            
            for(int i= 0; i<list.getLength(); i++){
                    Node node = list.item(i);
                    if(node.getNodeType() == Node.ELEMENT_NODE) {
                        Element element = (Element)node;
                        System.out.println("\nEMP MODE: "+element.getAttribute("mode"));
                        
                        NodeList nList = element.getElementsByTagName("name");
                        Element nElement = (Element)nList.item(0);
                        NodeList tList = nElement.getChildNodes();
                        System.out.println("NAME: " + ((Node)tList.item(0)).getNodeValue().trim());
                        
                        nList = element.getElementsByTagName("empid");
                        nElement = (Element)nList.item(0);
                        tList = nElement.getChildNodes();
                        System.out.println("EMP_ID: " + ((Node)tList.item(0)).getNodeValue().trim());
                        
                        nList = element.getElementsByTagName("designation");
                        nElement = (Element)nList.item(0);
                        tList = nElement.getChildNodes();
                        System.out.println("DESIGNATION: " + ((Node)tList.item(0)).getNodeValue().trim());
                        
                        nList = element.getElementsByTagName("technology");
                        nElement = (Element)nList.item(0);
                        tList = nElement.getChildNodes();
                        System.out.println("TECHNOLOGY: " + ((Node)tList.item(0)).getNodeValue().trim());
                    }
            }            
     } catch (ParserConfigurationException e) {
      e.printStackTrace();  
  } catch (SAXException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  } 
 }
}


OUTPUT:

ROOT: organization
No. Of Employees: 2

EMP MODE: permanent
NAME: John
EMP_ID: 1234
DESIGNATION: SE
TECHNOLOGY: Java

EMP MODE: contract
NAME: David
EMP_ID: 4545
DESIGNATION: Manager
TECHNOLOGY: .NET



SAX Parser:

Simple API for XML (SAX) parser will not create any internal tree structure as like DOM. It just search for the component occurrences as per input and it will gives the values. Always SAX parser will read only specific document values as requested. 

As advantage SAX parser is much more space efficient in case of a huge document, because its not creating complete tree structure like DOM. Next its faster and easy to implement with basic needs. 
From functionality side it serves less as compared to DOM.


SAX Parser for above XML document:

import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXParserDemo {
 
 public static void main(String[] args) {
  String file = "document.xml";
  
  parseXMLUsingSAX(file);
 }
 
 public static void parseXMLUsingSAX(String file) {
  try{
   DefaultHandler handler = createHandler();
   
   SAXParserFactory factory = SAXParserFactory.newInstance();
   SAXParser parser = factory.newSAXParser();
   
   parser.parse(file, handler);
   
  }catch (ParserConfigurationException  e) {
   e.printStackTrace();
  }catch (SAXException e) {
   e.printStackTrace();
  }catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 public static DefaultHandler createHandler(){
  DefaultHandler handler = null;
  try{
   handler = new DefaultHandler(){
    boolean fName = false;
    boolean fEmpId = false;
    boolean fDesig = false;
    boolean fTech = false;
    public void startElement(String uri, String vName, String tagName, Attributes attri){
     try{
      if(tagName.equalsIgnoreCase("employee")){
       System.out.println("\nMODE: " + attri.getValue("mode"));
      }
      if(tagName.equalsIgnoreCase("name")) fName = true;
      if(tagName.equalsIgnoreCase("empid")) fEmpId = true;
      if(tagName.equalsIgnoreCase("designation")) fDesig = true;
      if(tagName.equalsIgnoreCase("technology")) fTech = true;
     }catch (Exception e) {
      e.printStackTrace();
     }     
    }
    
    public void characters(char chars[], int id, int size) throws SAXException {
     if (fName) {
      System.out.println("NAME: " + new String(chars, id, size));
      fName = false;
     }else if (fEmpId) {
      System.out.println("EMP_ID: " + new String(chars, id, size));
      fEmpId = false;
     }else if (fDesig) {
      System.out.println("DESIGNATION: " + new String(chars, id, size));
      fDesig = false;
     }else if (fTech) {
      System.out.println("TECHNOLOGY: " + new String(chars, id, size));
      fTech = false;
     }    
    }
   };
   
  }catch (Exception e) {
   e.printStackTrace();
  }
  return handler;
 }
}


OUTPUT:

MODE: permanent
NAME: John
EMP_ID: 1234
DESIGNATION: SE
TECHNOLOGY: Java

MODE: contract
NAME: David
EMP_ID: 4545
DESIGNATION: Manager
TECHNOLOGY: .NET









Java Interview Questions - 3



Java Interview Questions



1. Which is the base class for all classes in java?

Object class.


2. What are methods in object class in java?

clone() - Creates and returns a copy of this object.

equals(Object obj) - Indicates whether some other object is "equal to" this one.

finalize() - Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

getClass() - Returns the run-time class of an object.

hashCode() - Returns a hash code value for the object.

notify() - Wakes up a single thread that is waiting on this object's monitor.

notifyAll() - Wakes up all threads that are waiting on this object's monitor.

toString() - Returns a string representation of the object.

wait() - Causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.

wait(long timeout) - Causes current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.

wait(long timeout, int nanosec) - Causes current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.


3. Program to remove any given character from a String?


public class RemoveChar {
 
 public static void main(String[] args) {
  String line = "A simple implementation of Bindings backed";
  char chr = 'i';
  String finalStr = new RemoveChar().removecharater(line, chr);
  
  System.out.println("INPUT:  "+line);
  System.out.println("CHAR TO REMOVE: "+chr);
  System.out.println("\nOUTPUT: "+finalStr);
 }
 
 public String removecharater(String line, char chr){
  char[] charArr = line.toCharArray();
  StringBuilder strBuilder = new StringBuilder();
  
  for (char c : charArr) {
   if(c != chr){
    strBuilder.append(c);
   }   
  }  
  return strBuilder.toString();
 }
}


OUTPUT:


INPUT:  A simple implementation of Bindings backed
CHAR TO REMOVE: i

OUTPUT: A smple mplementaton of Bndngs backed




4. Find no. of occurances of each character in a given string?


public class CharOccurance {

 public static void main(String[] args) {
  String line = "implementation";
  
  HashMap<Character, Integer> charCounts = getCharCounts(line);
  
  System.out.println("INPUT:  "+line);
  System.out.println("RESULT: "+charCounts);  
 } 
 
 public static HashMap<Character, Integer> getCharCounts(String line){
  HashMap<Character, Integer> charCounts = new HashMap<Character, Integer>();
  char[] chr = line.toCharArray();
  for (char c : chr) {
   if(charCounts.containsKey(c)){
    int cnt = charCounts.get(c);
    charCounts.put(c, cnt+1);
   }else{
    charCounts.put(c, 1);
   }
  }  
  return charCounts;
 } 
}

OUTPUT:


INPUT:  implementation
RESULT: {t=2, e=2, a=1, p=1, n=2, o=1, l=1, m=2, i=2}


5. Find second highest number in an integer array?


public class SecondHighest {

 public static void main(String[] args) {
  int[] values = {8,4,1,3,7,6,5,2,9};
  
  // Sorting array into TreeSet
  Set<Integer> tree = new TreeSet<Integer>();
  for (int i : values) {
   tree.add(i);
  }
  
  // Copy TreeSet values into ArrayList
  List<Integer> list = new ArrayList<Integer>();
  list.addAll(tree);
  
  // Print last 2nd value for 2nd Hignest value
  System.out.println("SECOND HIGHEST : "+list.get( list.size()-2 ));  
 }  
}

OUTPUT:


SECOND HIGHEST : 8


6. How to read/write/append/delete a file?

Please refer to the earlier post for complete all file operations. - http://javadiscover.blogspot.com/2013/03/how-to-create-writeappend-read-delete.html 


7. What are the ways we can create threads in java?

By 2 ways we can create thread 
a. Extending Thread class
b. Implementing Runnable interface 


8. How to create a Thread using extending a Thread class?



public class MyThread extends Thread{
 
 @Override
 public void run() {
  int i=0;
  while(i<5){
   System.out.println(Thread.currentThread().getName());
   i++;
  }
 }
 
 public static void main(String[] args) {
  MyThread t1 = new MyThread();
  MyThread t2 = new MyThread();
  t1.start();
  t2.start();
 }
}


OUTPUT:


Thread-1
Thread-1
Thread-1
Thread-1
Thread-1
Thread-0
Thread-0
Thread-0
Thread-0
Thread-0




9. How to create a Thread using implemeting Runnable interface ?


public class MyThread implements Runnable{
 
 public void run() {
  int i=0;
  while(i<5){
   System.out.println(Thread.currentThread().getName());
   i++;
  }
 }
 
 public static void main(String[] args) {
  MyThread obj = new MyThread();
  Thread t1 = new Thread(obj);
  Thread t2 = new Thread(obj);
  t1.start();
  t2.start();
 }
}

OUTPUT:


Thread-0
Thread-1
Thread-0
Thread-1
Thread-0
Thread-1
Thread-0
Thread-1
Thread-0
Thread-1


10. What are different types of cloning in Java?

There are 2 types of cloning in Java, Deep and shallow cloning (Copy). By default shallow copy is used in Java. As we seen in 2nd question by Object class clone() will do this operation by default.