Code for Java compression import java.io.*; import java.util.zip.*; /** Compresses a file into a GZip archive. **/ public class SimpleGZip { public static void main(String[] args) { if(args.length<1) { System.out.println("Usage: Java SimpleGZip fileName"); System.exit(0); } String fileName = args[0]; try{makeGZip(fileName);} //try{makeZip(fileName);} catch(Exception e){System.err.println(e);} } /** Creates a GZip archive using the file name passed in as a **/ public static void makeGZip(String fileName) throws IOException, FileNotFoundException { File file = new File(fileName); FileInputStream fin = new FileInputStream(file); BufferedInputStream in = new BufferedInputStream(fin); //if input file is a.txt, then output file is a.txt.gz FileOutputStream fos = new FileOutputStream(file + ".gz"); GZIPOutputStream gzos = new GZIPOutputStream(fos); byte[] buf = new byte[1024]; int len; //Store the length of a line while((len = in.read(buf)) >= 0) { gzos.write(buf, 0, len); } in,close(); gzos.close(); } /** Creates a Zip archive. If the filename passed in is a directory, the directory's contents will be made into a Zip file **/ public static fvoid makeZip(String fileName) throws IOException, FileNotFoundException { File file = File(fileName); zos = new ZipOutputStream(new FileOutputStream(file + ".zip")); recurseFiles(file); zos.close(); } /** Recurses down a directory and its subdirectories to look for files to add to the Zip. If the current file being looked at is not a directory, the method adds it to the Zip file. **/ private static void recurseFiles(File file) throws IOException, FileNotFoundException { if(file.isDirectory()) { String[] fileNames = file.list(); if(fileNames != null) for(int i=0; i<fileNames.length; i++) recurseFiles(new File(file, fileNames[i])); //file, fileNames[i] for full path }else { FileInputStream fin = new FileInputStream(file); BufferedInputStream in = BufferedInputStream(fin); byte[] buf = new byte[1024]; int len; ZipEntry zipEntry = new ZipEntry(file.toString()); zos.putNextEntry(zipEntry); while((len = in.read(buf)) >= 0) { gzos.write(buf, 0, len); } in,close(); gzos.closeEntry(); } }