Sidebar

Can I untar a tar.gz or tgz file in QIE?

0 votes
338 views
asked Aug 10, 2017 by brandon-w-8204 (33,170 points)
I have a tar.gz or tgz file and I need to unzip it. Can this be done in QIE?

1 Answer

0 votes

Here is code that uses java classes already included in QIE:

function extractTarGZ(fileNameAndPath, cdaDirectory) {
   var inputStream;
   var BUFFER_SIZE = 4096;
   var gzipIn;
   var tarIn;
   
   try {
      inputStream = new java.io.FileInputStream(new java.io.File(fileNameAndPath));
      gzipIn = new org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream(inputStream);
      tarIn = new org.apache.commons.compress.archivers.tar.TarArchiveInputStream(gzipIn);
      var entry;
      
      while ((entry = tarIn.getNextTarEntry()) !== null) {
         /** If the entry is a directory, create the directory. **/
         if (entry.isDirectory()) {
            var f = new java.io.File(cdaDirectory + entry.getName());
            var created = f.mkdir();
            
            if (!created) {
               qie.debug("Unable to create directory '%s', during extraction of archive contents.\n" + f.getAbsolutePath());
            }
         } else {
            var count;
            var data = new java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, BUFFER_SIZE);
            var fos = new java.io.FileOutputStream(cdaDirectory + entry.getName(), false);
            var dest;
            
            try {
               dest = new java.io.BufferedOutputStream(fos, BUFFER_SIZE);
               
               while ((count = tarIn.read(data, 0, BUFFER_SIZE)) != -1) {
                  dest.write(data, 0, count);
               }
               dest.close();
            } catch (e1) {
               if (dest) {
                  dest.close();
               }
               throw 'e1: ' + e1;
            }
         }
      }
      
      tarIn.close();
      qie.debug("Untar completed successfully!");
   } catch (e) {
      throw 'e: ' + e;
   }
   finally {
      if (tarIn) {
         tarIn.close();
      }
      if (gzipIn) {
         gzipIn.close();
      }
      if (inputStream) {
         inputStream.close();
      }
   }
   
}
try {
   var fileNameAndPath = "C:\\temp\\test.tar.gz";
   
   extractTarGZ(fileNameAndPath, "c:\\temp\\cdaDirectory\\");
   qie.deleteFile(fileNameAndPath);
} catch (e) {
   throw "failed to run :(" + e;
}

answered Aug 10, 2017 by brandon-w-8204 (33,170 points)
...