Pages

Wednesday, July 9, 2014

7z Compression of files using Apache Commons Compress API

Here is a demo program to demonstrate archiving of files to 7z format using Apache Commons Compress API

List of Jars required:
  • xz-1.4.jar
  • commons-compress-1.8.jar

    package demo.sevenzcompression.examples;
    
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    
    import org.apache.commons.compress.archivers.sevenz.*;
    
    public class SevenZCompressionDemo {
    
    	public static void main(String args[]) {
    
    		// set the files to be archived
    		File file1 = new File("Demo1.csv");
    		File file2 = new File("Demo2.csv");
    		File file3 = new File("Demo3.csv");
    		File file4 = new File("Demo4.csv");
    
    		// add files to an array list
    		ArrayList<File> filesToArchive = new ArrayList<File>();
    		filesToArchive.add(file1);
    		filesToArchive.add(file2);
    		filesToArchive.add(file3);
    		filesToArchive.add(file4);
    
    		// get formatted file name with system date (ex: Archive_20140709.7z)
    		String sevenZarchiveFileName = getFormattedFileName();
    		File sevenZFile = new File(sevenZarchiveFileName);
    		SevenZOutputFile sevenZOutput = null;
    
    		System.out.println("Attempting to create " + sevenZarchiveFileName
    				+ ".......");
    
    		try {
    			sevenZOutput = new SevenZOutputFile(sevenZFile);
    		} catch (IOException e1) {
    
    			System.out.println(e1.getMessage());
    			System.exit(0);
    		}
    		for (int i = 0; i < filesToArchive.size(); i++) {
    			try {
    
    				SevenZArchiveEntry entry = sevenZOutput.createArchiveEntry(
    						filesToArchive.get(i), filesToArchive.get(i).getName());
    				sevenZOutput.putArchiveEntry(entry);
    				FileInputStream in = new FileInputStream(filesToArchive.get(i));
    				byte[] b = new byte[1024];
    				int count = 0;
    				while ((count = in.read(b)) > 0) {
    					sevenZOutput.write(b, 0, count);
    				}
    				sevenZOutput.closeArchiveEntry();
    				in.close();
    
    			} catch (IOException e) {
    
    				System.out.println(e.getMessage());
    				System.exit(0);
    			}
    		}
    		try {
    			sevenZOutput.close();
    			System.out.println("Archive " + sevenZarchiveFileName
    					+ " created successfully.......");
    
    		} catch (IOException e) {
    
    			System.out.println(e.getMessage());
    
    		}
    
    	}
    
    	private static String getFormattedFileName() {
    
    		long millis = System.currentTimeMillis();
    		Date date = new Date(millis);
    		SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    		String filename = "Archive_" + df.format(date) + ".7z";
    		return filename;
    	}
    
    }