以编程方式在Android

时间:2018-08-01 05:42:35

标签: android file

我想以编程方式在我的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文件?有没有图书馆可以做到这一点?

1 个答案:

答案 0 :(得分:0)

因为junrar库提取了.rar文件。 .tgz是完全不同的压缩格式。该库不支持它。这就是为什么名称是“ unrar”而不是“ untgz”或gunzip的原因(用于创建.tgz文件的命令通常是gzip来创建,gunzip来打开)。