1

Androidでzip4jを使用して暗号化されたzipファイルを読み取る次のコードがあります。一時ファイルは提供しません。zip4j は復号化のために一時ファイルを作成しますか? それとも、暗号化されたデータが一時的にストレージに書き込まれないように、zip 標準ではオンザフライで復号化が可能ですか?

ZipFile table = null;
    try {
        table = new ZipFile("/sdcard/file.zip");
        if( table.isEncrypted() ){
            table.setPassword("password");
        }
    } catch (Exception e) {
        // if can't be opened then return null
        e.printStackTrace();
        return;
    }
    InputStream in = null;
    try {

        FileHeader entry = table.getFileHeader("file.txt");

        in = table.getInputStream(entry);
             ...
4

2 に答える 2

-2

これはzip4jソースからのものです

public ZipInputStream getInputStream() throws ZipException {
    if (fileHeader == null) {
        throw new ZipException("file header is null, cannot get inputstream");
    }

    RandomAccessFile raf = null;
    try {
        raf = createFileHandler(InternalZipConstants.READ_MODE);
        String errMsg = "local header and file header do not match";
        //checkSplitFile();

        if (!checkLocalHeader())
            throw new ZipException(errMsg);

        init(raf);
        ...
}
private RandomAccessFile createFileHandler(String mode) throws ZipException {
    if (this.zipModel == null || !Zip4jUtil.isStringNotNullAndNotEmpty(this.zipModel.getZipFile())) {
        throw new ZipException("input parameter is null in getFilePointer");
    }

    try {
        RandomAccessFile raf = null;
        if (zipModel.isSplitArchive()) {
            raf = checkSplitFile();
        } else {
            raf = new RandomAccessFile(new File(this.zipModel.getZipFile()), mode);
        }
        return raf;
    } catch (FileNotFoundException e) {
        throw new ZipException(e);
    } catch (Exception e) {
        throw new ZipException(e);
    }
}

このraf = new RandomAccessFile(new File(this.zipModel.getZipFile()), mode);行は、暗号化されたzipファイルのパスのサブディレクトリの下で、実際に復号化ファイルを作成していることを意味していると思います。

その場で解凍できるかどうかはわかりません(おそらくできません)。復号化されたファイルを他人に見られたくない場合は、sd カードではなく、アプリの保護された内部ストレージ スペースに zip ファイルを保存することを検討してください。

于 2013-10-10T18:23:18.830 に答える