Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I extract a tar file in Java?

Tags:

java

archive

tar

How do I extract a tar (or tar.gz, or tar.bz2) file in Java?

like image 356
skiphoppy Avatar asked Nov 24 '08 21:11

skiphoppy


People also ask

How do I extract a tar file?

Simply right-click the item you want to compress, mouseover compress, and choose tar. gz. You can also right-click a tar. gz file, mouseover extract, and select an option to unpack the archive.

How do I extract only certain files from a tar?

Now, if you want a single file or folder from the “tar” file, you need to use the name of the “tar” file and the path to a single file in it. So, we have used the “tar” command with the “-xvf” option, the name of the “tar” file, and the path of a file to be extracted from it as below.

How do you untar in Java?

Java example to untar a file gz file to get a . tar file. Using unTarFile() method this . tar file is untarred.


1 Answers

You can do this with the Apache Commons Compress library. You can download the 1.2 version from http://mvnrepository.com/artifact/org.apache.commons/commons-compress/1.2.

Here are two methods: one that unzips a file and another one that untars it. So, for a file <fileName>tar.gz, you need to first unzip it and after that untar it. Please note that the tar archive may contain folders as well, case in which they need to be created on the local filesystem.

Enjoy.

/** Untar an input file into an output file.   * The output file is created in the output folder, having the same name  * as the input file, minus the '.tar' extension.   *   * @param inputFile     the input .tar file  * @param outputDir     the output directory file.   * @throws IOException   * @throws FileNotFoundException  *    * @return  The {@link List} of {@link File}s with the untared content.  * @throws ArchiveException   */ private static List<File> unTar(final File inputFile, final File outputDir) throws FileNotFoundException, IOException, ArchiveException {      LOG.info(String.format("Untaring %s to dir %s.", inputFile.getAbsolutePath(), outputDir.getAbsolutePath()));      final List<File> untaredFiles = new LinkedList<File>();     final InputStream is = new FileInputStream(inputFile);      final TarArchiveInputStream debInputStream = (TarArchiveInputStream) new ArchiveStreamFactory().createArchiveInputStream("tar", is);     TarArchiveEntry entry = null;      while ((entry = (TarArchiveEntry)debInputStream.getNextEntry()) != null) {         final File outputFile = new File(outputDir, entry.getName());         if (entry.isDirectory()) {             LOG.info(String.format("Attempting to write output directory %s.", outputFile.getAbsolutePath()));             if (!outputFile.exists()) {                 LOG.info(String.format("Attempting to create output directory %s.", outputFile.getAbsolutePath()));                 if (!outputFile.mkdirs()) {                     throw new IllegalStateException(String.format("Couldn't create directory %s.", outputFile.getAbsolutePath()));                 }             }         } else {             LOG.info(String.format("Creating output file %s.", outputFile.getAbsolutePath()));             final OutputStream outputFileStream = new FileOutputStream(outputFile);              IOUtils.copy(debInputStream, outputFileStream);             outputFileStream.close();         }         untaredFiles.add(outputFile);     }     debInputStream.close();       return untaredFiles; }  /**  * Ungzip an input file into an output file.  * <p>  * The output file is created in the output folder, having the same name  * as the input file, minus the '.gz' extension.   *   * @param inputFile     the input .gz file  * @param outputDir     the output directory file.   * @throws IOException   * @throws FileNotFoundException  *    * @return  The {@File} with the ungzipped content.  */ private static File unGzip(final File inputFile, final File outputDir) throws FileNotFoundException, IOException {      LOG.info(String.format("Ungzipping %s to dir %s.", inputFile.getAbsolutePath(), outputDir.getAbsolutePath()));      final File outputFile = new File(outputDir, inputFile.getName().substring(0, inputFile.getName().length() - 3));      final GZIPInputStream in = new GZIPInputStream(new FileInputStream(inputFile));     final FileOutputStream out = new FileOutputStream(outputFile);      IOUtils.copy(in, out);      in.close();     out.close();      return outputFile; } 
like image 114
Dan Borza Avatar answered Sep 17 '22 14:09

Dan Borza