Apache Commons Compress:打开 .tar.gz
Apache Commons Compress: Opening .tar.gz
我正在开发一个将从 tar.gz 文件中获取信息的软件,并且我正在使用 Apache commons-compress 库。但我收到以下错误:
Caused by: java.lang.IllegalArgumentException: Invalid byte 4 at offset 0 in 'O�!�C' len=8
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctal(TarUtils.java:134)
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctalOrBinary(TarUtils.java:166)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:953)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:940)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.<init>(TarArchiveEntry.java:324)
at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:274)
... 2 more
使用的示例 tar.gz 文件是 eclipse-jee-luna-SR1-linux-gtk-x86_64。tar.gz
这里是使用库的class:
public class TarGzBuildAdapter extends BuildAdapter {
public TarGzBuildAdapter(File build) {
super(build);
}
@Override
public List<ArtifactInfo> getArtifactInfos() throws IOException {
TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(
new FileInputStream(this.build));
TarArchiveEntry tarArchiveEntry;
List<ArtifactInfo> artifactInfos = new LinkedList<ArtifactInfo>();
while ((tarArchiveEntry = tarArchiveInputStream.getNextTarEntry()) != null) {
System.out.println(String.format("Name: %s LinkName: %s Size: %Ld RealSize: %Ld",
tarArchiveEntry.getName(), tarArchiveEntry.getLinkName(),
tarArchiveEntry.getSize(), tarArchiveEntry.getRealSize()));
artifactInfos.add(new ArtifactInfo(tarArchiveEntry.getName(), tarArchiveEntry
.getRealSize()));
}
tarArchiveInputStream.close();
return artifactInfos;
}
}
您阅读的文件不是 TAR 而是 GZ 流。您需要先解压缩它才能使用 TarArchiveInputStream
.
tarArchiveInputStream = new TarArchiveInputStream(
new GzipCompressorInputStream(
new BufferedInputStream(
new FileInputStream(fileName))));
我正在开发一个将从 tar.gz 文件中获取信息的软件,并且我正在使用 Apache commons-compress 库。但我收到以下错误:
Caused by: java.lang.IllegalArgumentException: Invalid byte 4 at offset 0 in 'O�!�C' len=8
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctal(TarUtils.java:134)
at org.apache.commons.compress.archivers.tar.TarUtils.parseOctalOrBinary(TarUtils.java:166)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:953)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.parseTarHeader(TarArchiveEntry.java:940)
at org.apache.commons.compress.archivers.tar.TarArchiveEntry.<init>(TarArchiveEntry.java:324)
at org.apache.commons.compress.archivers.tar.TarArchiveInputStream.getNextTarEntry(TarArchiveInputStream.java:274)
... 2 more
使用的示例 tar.gz 文件是 eclipse-jee-luna-SR1-linux-gtk-x86_64。tar.gz
这里是使用库的class:
public class TarGzBuildAdapter extends BuildAdapter {
public TarGzBuildAdapter(File build) {
super(build);
}
@Override
public List<ArtifactInfo> getArtifactInfos() throws IOException {
TarArchiveInputStream tarArchiveInputStream = new TarArchiveInputStream(
new FileInputStream(this.build));
TarArchiveEntry tarArchiveEntry;
List<ArtifactInfo> artifactInfos = new LinkedList<ArtifactInfo>();
while ((tarArchiveEntry = tarArchiveInputStream.getNextTarEntry()) != null) {
System.out.println(String.format("Name: %s LinkName: %s Size: %Ld RealSize: %Ld",
tarArchiveEntry.getName(), tarArchiveEntry.getLinkName(),
tarArchiveEntry.getSize(), tarArchiveEntry.getRealSize()));
artifactInfos.add(new ArtifactInfo(tarArchiveEntry.getName(), tarArchiveEntry
.getRealSize()));
}
tarArchiveInputStream.close();
return artifactInfos;
}
}
您阅读的文件不是 TAR 而是 GZ 流。您需要先解压缩它才能使用 TarArchiveInputStream
.
tarArchiveInputStream = new TarArchiveInputStream(
new GzipCompressorInputStream(
new BufferedInputStream(
new FileInputStream(fileName))));