1

Zipアーカイブ内の特定のファイルを取得し、それを抽出し、暗号化してから、元のファイルを置き換えてアーカイブ内に戻そうとしています。

これが私がこれまでに試したことです..

public static boolean encryptXML(File ZipArchive, String key) throws ZipException, IOException, Exception {
    ZipFile zipFile = new ZipFile(ZipArchive);
    List<FileHeader> fileHeaderList = zipFile.getFileHeaders();
    for (FileHeader fh : fileHeaderList)
    {
        if (fh.getFileName().equals("META-INF/file.xml"))
        {
            Path tempdir = Files.createTempDirectory("Temp");
            zipFile.extractFile(fh, tempdir.toString());
            File XMLFile = new File(tempdir.toFile(), fh.getFileName());

            // Encrypting XMLFile, Ignore this part

            // Here, Replace the original XMLFile inside ZipArchive with the encrypted one <<<<<<<<

            return true;
        }
    }
    return false;
}

コードの置換部分に行き詰まったのですが、とにかく、Zip アーカイブ全体を抽出しなくてもこれを行うことができますか?

事前に感謝します。

4

3 に答える 3

1

別のライブラリを使用しているため、これが役立つかどうかはわかりませんが、ZT Zipのソリューションは次のようになります。

ZipUtil.unpackEntry(new File("/tmp/demo.zip"), "foo.txt", new File("foo.txt"));
// encrypt the foo.txt
ZipUtil.replaceEntry(new File("/tmp/demo.zip"), "foo.txt", new File("foo.txt"));

これによりファイルが解凍され、foo.txt暗号化した後、以前のエントリを新しいエントリに置き換えることができます。

于 2015-04-29T11:45:54.983 に答える
0

ビンゴ!

私はそのようにそれを行うことができます

ZipParameters parameters = new ZipParameters();
parameters.setIncludeRootFolder(true);
zipFile.removeFile(fh);
zipFile.addFolder(new File(tempdir.toFile(), "META-INF"), parameters);
于 2015-04-29T11:15:53.230 に答える