我想以编程方式在我的Android应用程序中提取.tgz文件。我搜索了很多,但没有得到任何答案。下面是我用来提取的代码。
public static void extractArchive2(File archive, File destination) {
Archive arch = null;
try {
arch = new Archive(archive);
} catch (RarException e) {
Log.d("MainActivity::","RarException::" + e.toString());
} catch (IOException e1) {
Log.d("MainActivity::","IOException::" + e1.toString());
}
if (arch != null) {
if (arch.isEncrypted()) {
return;
}
FileHeader fh = null;
while (true) {
fh = arch.nextFileHeader();
if (fh == null) {
Log.d("MainActivity::","fh null::");
break;
}
if (fh.isEncrypted()) {
Log.d("MainActivity::","file is encrypted cannot extract::" + fh.getFileNameString());
continue;
}
Log.d("MainActivity::", "extracting: " + fh.getFileNameString() );
try {
if (fh.isDirectory()) {
createDirectory(fh, destination);
} else {
File f = createFile(fh, destination);
OutputStream stream = new FileOutputStream(f);
arch.extractFile(fh, stream);
stream.close();
}
} catch (IOException e) {
Log.d("MainActivity::", "IOException 2: " + e.toString());
} catch (RarException e) {
Log.d("MainActivity::", "RarException 2: " + e.toString());
}
}
}
}
但是这里的标头始终为空,并导致指向nullpointer。有什么办法可以提取.tgz文件?有没有图书馆可以做到这一点?
答案 0 :(得分:0)
因为junrar库提取了.rar文件。 .tgz是完全不同的压缩格式。该库不支持它。这就是为什么名称是“ unrar”而不是“ untgz”或gunzip的原因(用于创建.tgz文件的命令通常是gzip来创建,gunzip来打开)。