In this post we'll see a Java program showing how to untar a tar file. It has both the steps to first decompress a .tar.gz file and later untar it.
- Refer Creating tar file and GZipping multiple files to see how to create a tar file.
Using Apache Commons Compress
Apache Commons Compress library is used in the code for untarring a file. You can download it from here \– https://commons.apache.org/proper/commons-compress/download_compress.cgi.
Make sure to add commons-compress-xxx.jar in your application’s class path. I have used commons-compress-1.13 version.
Java example to untar a file
This Java program has two methods deCompressGZipFile()
method is used to decompress a .tar.gz file to get a .tar file.
Using unTarFile()
method this .tar file is untarred.
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.utils.IOUtils; public class UnTarDemo { public static void main(String[] args) { // Path to input file, which is a // tar file compressed to create gzip file String INPUT_FILE = "G:\\Test.tar.gz"; // This folder should exist, that's where // .tar file will go String TAR_FOLDER = "G:\\TarFile"; // After untar files will go to this folder String DESTINATION_FOLDER = "G:\\Temp"; UnTarDemo unTarDemo = new UnTarDemo(); try { File inputFile = new File(INPUT_FILE); String outputFile = getFileName(inputFile, TAR_FOLDER); System.out.println("outputFile " + outputFile); File tarFile = new File(outputFile); // Calling method to decompress file tarFile = unTarDemo.deCompressGZipFile(inputFile, tarFile); File destFile = new File(DESTINATION_FOLDER); if(!destFile.exists()){ destFile.mkdir(); } // Calling method to untar file unTarDemo.unTarFile(tarFile, destFile); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * * @param tarFile * @param destFile * @throws IOException */ private void unTarFile(File tarFile, File destFile) throws IOException{ FileInputStream fis = new FileInputStream(tarFile); TarArchiveInputStream tis = new TarArchiveInputStream(fis); TarArchiveEntry tarEntry = null; // tarIn is a TarArchiveInputStream while ((tarEntry = tis.getNextTarEntry()) != null) { File outputFile = new File(destFile + File.separator + tarEntry.getName()); if(tarEntry.isDirectory()){ System.out.println("outputFile Directory ---- " + outputFile.getAbsolutePath()); if(!outputFile.exists()){ outputFile.mkdirs(); } }else{ //File outputFile = new File(destFile + File.separator + tarEntry.getName()); System.out.println("outputFile File ---- " + outputFile.getAbsolutePath()); outputFile.getParentFile().mkdirs(); //outputFile.createNewFile(); FileOutputStream fos = new FileOutputStream(outputFile); IOUtils.copy(tis, fos); fos.close(); } } tis.close(); } /** * Method to decompress a gzip file * @param gZippedFile * @param newFile * @throws IOException */ private File deCompressGZipFile(File gZippedFile, File tarFile) throws IOException{ FileInputStream fis = new FileInputStream(gZippedFile); GZIPInputStream gZIPInputStream = new GZIPInputStream(fis); FileOutputStream fos = new FileOutputStream(tarFile); byte[] buffer = new byte[1024]; int len; while((len = gZIPInputStream.read(buffer)) > 0){ fos.write(buffer, 0, len); } fos.close(); gZIPInputStream.close(); return tarFile; } /** * This method is used to get the tar file name from the gz file * by removing the .gz part from the input file * @param inputFile * @param outputFolder * @return */ private static String getFileName(File inputFile, String outputFolder){ return outputFolder + File.separator + inputFile.getName().substring(0, inputFile.getName().lastIndexOf('.')); } }
That's all for this topic How to Untar a File in Java. If you have any doubt or any suggestions to make please drop a comment. Thanks!
>>>Return to Java Programs Page
Related Topics
You may also like-