The complete source code is given below:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; /** * Creating a tar.gz with apache commons-compress. **/ public class TarGZ { static final int BUFFER = 2048; /** * Command line arguments : * argv[0]-----> Source directory. * argv[1]-----> Destination tar.gz file. **/ public static void main(String argv[]) { FileOutputStream fOut = null; BufferedOutputStream bOut = null; GzipCompressorOutputStream gzOut = null; TarArchiveOutputStream tOut = null; try { /** Step: 1 ---> create a TarArchiveOutputStream object. **/ fOut = new FileOutputStream(new File(argv[1])); bOut = new BufferedOutputStream(fOut); gzOut = new GzipCompressorOutputStream(bOut); tOut = new TarArchiveOutputStream(gzOut); /** * Step: 2 --->Open the source data and get a list of files from * given directory. **/ File source = new File(argv[0]); if (!source.exists()) { System.out.println("Input directory does not exist.."); System.exit(0); } File files[] = source.listFiles(); for (int i = 0; i < files.length; i++) { System.out.println("Adding File: " + source.getParentFile().toURI() .relativize(files[i].toURI()).getPath()); /** Step: 3 ---> Create a tar entry for each file that is read. **/ /** * relativize is used to to add a file to a tar, without * including the entire path from root. **/ TarArchiveEntry entry = new TarArchiveEntry(files[i], source .getParentFile().toURI().relativize(files[i].toURI()) .getPath()); /** Step: 4 ---> Put the tar entry using putArchiveEntry. **/ tOut.putArchiveEntry(entry); /** * Step: 5 ---> Write the data to the tar file and close the * input stream. **/ FileInputStream fi = new FileInputStream(files[i]); BufferedInputStream sourceStream = new BufferedInputStream(fi, BUFFER); int count; byte data[] = new byte[BUFFER]; while ((count = sourceStream.read(data, 0, BUFFER)) != -1) { tOut.write(data, 0, count); } sourceStream.close(); /** Step: 6 --->close the archive entry. **/ tOut.closeArchiveEntry(); } /** Step: 7 --->close the output stream. **/ tOut.close(); System.out.println("tar.gz file created successfully!!"); } catch (Exception e) { e.printStackTrace(); } } }
Create tar.gz File From Directory Recursively
Please visit http://yourjavatutor.blogspot.in/2012/07/create-targz-file-from-directory.html to learn about this topic.
This helped me out a lot, thanks!
ReplyDeletei have two text files in a directory and want to comperes that directory into tar.bz2 , please any one help me, thanks in advance
ReplyDelete