2

zip ファイルから入力ストリームを取得して別の zip ファイルに追加しようとしていますが、null ポインター例外がスローされます。これが私のコードです。

       ZipParameters parameters = new ZipParameters();
       ZipFile newZipFile = new ZipFile(new File(CacheDir, "temp.card"));
       File temp = new File(CacheDir, "tempFile");
        if (!temp.exists()) {
                temp.createNewFile();
        }
       newZipFile.createZipFile(temp, parameters);
       if(newZipFile.getFile().exist()){
       if (string != null) {
            inputStream = zipFile.getInputStream(zipFile.getFileHeader(string));
       }
       if (inputStream != null) {
            newZipFile.addStream(inputStream,parameters);
       }
       }

このスコープ内のオブジェクトは null ではありません。しかし、ここで例外が発生しています:

newZipFile.addStream(inputStream,parameters);

ログ:

12-14 06:27:43.891: W/System.err(2197): net.lingala.zip4j.exception.ZipException: input file is null
12-14 06:27:43.891: W/System.err(2197):     at net.lingala.zip4j.io.CipherOutputStream.putNextEntry(CipherOutputStream.java:71)
12-14 06:27:43.895: W/System.err(2197):     at net.lingala.zip4j.io.DeflaterOutputStream.putNextEntry(DeflaterOutputStream.java:45)
12-14 06:27:43.895: W/System.err(2197):     at net.lingala.zip4j.zip.ZipEngine.addStreamToZip(ZipEngine.java:230)
12-14 06:27:43.895: W/System.err(2197):     at net.lingala.zip4j.core.ZipFile.addStream(ZipFile.java:395)
4

1 に答える 1

4

その例外の起源をたどると、zip4j のソース コードで次のことがわかりました。

if (!zipParameters.isSourceExternalStream() && file == null) {
    throw new ZipException("input file is null");
}

したがって、簡単な修正は、そのチェックをバイパスすることです

parameters.setSourceExternalStream(true);

externalStreamPS:意味がわかりませんが、うまくいきました

于 2015-03-04T08:18:10.897 に答える