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; }