[ https://issues.apache.org/jira/browse/COMPRESS-417?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16092928#comment-16092928 ]
Stefan Bodewig edited comment on COMPRESS-417 at 7/19/17 10:57 AM: ------------------------------------------------------------------- The problem is inside the tar package as {code} public class Untargz { public static void main(String[] args) throws Exception { final File input = new File(args[0]); try (InputStream is = new FileInputStream(input); CompressorInputStream in = new GzipCompressorInputStream(is, true); OutputStream out = new FileOutputStream("foo.tar")) { IOUtils.copy(in, out); } try (InputStream is = new FileInputStream("foo.tar"); TarArchiveInputStream tin = new TarArchiveInputStream(is)) { TarArchiveEntry entry = tin.getNextTarEntry(); while (entry != null) { File archiveEntry = new File(entry.getName()); archiveEntry.getParentFile().mkdirs(); if (entry.isDirectory()) { archiveEntry.mkdir(); entry = tin.getNextTarEntry(); continue; } try (OutputStream out = new FileOutputStream(archiveEntry)) { IOUtils.copy(tin, out); } entry = tin.getNextTarEntry(); } } } } {code} fails for me and {{foo.tar}} is a valid archive. was (Author: bodewig): The problem is inside the tar package as {code} public class Untargz { public static void main(String[] args) throws Exception { final File input = new File(args[0]); try (InputStream is = new FileInputStream(input); CompressorInputStream in = new GzipCompressorInputStream(is, true); OutputStream out = new FileOutputStream("foo.tar")) { IOUtils.copy(in, out); } try (InputStream is = new FileInputStream("foo.tar"); TarArchiveInputStream tin = new TarArchiveInputStream(is)) { TarArchiveEntry entry = tin.getNextTarEntry(); while (entry != null) { File archiveEntry = new File(entry.getName()); archiveEntry.getParentFile().mkdirs(); if (entry.isDirectory()) { archiveEntry.mkdir(); entry = tin.getNextTarEntry(); continue; } try (OutputStream out = new FileOutputStream(archiveEntry)) { IOUtils.copy(tin, out); } entry = tin.getNextTarEntry(); } } } {code} fails for me and {{foo.tar}} is a valid archive. > Decompress tar.gz file failed. java.io.Exception:Error detected parsing the > header > ---------------------------------------------------------------------------------- > > Key: COMPRESS-417 > URL: https://issues.apache.org/jira/browse/COMPRESS-417 > Project: Commons Compress > Issue Type: Bug > Components: Archivers > Affects Versions: 1.14 > Reporter: alphacome > Priority: Critical > Attachments: 20000102.0000+0800-20000102.0015+0800_0.tar.gz > > > {code:java} > public static void deGzipArchive(String filepath,String dir) > throws Exception { > final File input = new File(filepath); > final InputStream is = new FileInputStream(input); > final CompressorInputStream in = new GzipCompressorInputStream(is, > true); > TarArchiveInputStream tin = new TarArchiveInputStream(in); > TarArchiveEntry entry = tin.getNextTarEntry(); > while (entry != null) { > File archiveEntry = new File(dir, entry.getName()); > archiveEntry.getParentFile().mkdirs(); > if (entry.isDirectory()) { > archiveEntry.mkdir(); > entry = tin.getNextTarEntry(); > continue; > } > OutputStream out = new FileOutputStream(archiveEntry); > IOUtils.copy(tin, out); > out.close(); > entry = tin.getNextTarEntry(); > } > in.close(); > tin.close(); > } > public static void main(String[] args) throws Exception { > > Gztest.deGzipArchive("D:/20000102.0000+0800-20000102.0015+0800_0.tar.gz","D:/"); > } > {code} > the tar.gz file can be decompressed in linux environment use 'tar' command. > The error log: > Exception in thread "main" java.io.IOException: Error detected parsing the > header > at > org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:286) > at gztest.deGzipArchive(gztest.java:23) > at gztest.main(gztest.java:149) > Caused by: java.lang.IllegalArgumentException: Invalid byte 100 at offset 0 > in 'dos{NUL}{NUL}{NUL}{NUL}{NUL}' len=8 > at > org.apache.commons.compress.archivers.tar.TarUtils.parseOctal(TarUtils.java:141) > at > org.apache.commons.compress.archivers.tar.TarUtils.parseOctalOrBinary(TarUtils.java:171) > at > org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:1128) > at > org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:1091) > at > org.apache.commons.compress.archivers.tar.TarArchiveEntry.<init>(TarArchiveEntry.java:368) > at > org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:284) > ... 2 more > -- This message was sent by Atlassian JIRA (v6.4.14#64029)