8

問題

既存のzipファイル「main.zip」があります。その中の1つのファイル「たとえばmain.zip/foo」を置き換えたいと思います。

気がついた:

http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipOutputStream.html

ただし、これは新しいZipファイルを作成するため、私が望むことを実行しません。したがって、main.zip内の既存のすべてのエントリも追加する必要があります。

質問:

JavaでZipアーカイブ内の単一のファイルを「置き換える」方法はありますか?(新しいzipアーカイブを再作成して、すべての古いデータをコピーすることなく)。

4

1 に答える 1

23

あなたは運がいいと思います。

Java 7java.nio.file.FileSystemを一緒に使用Files.copy()すると、テキストファイルを大きな zip ファイルに一瞬で挿入することができました。

public static void main(String[] argv) {
    Path myFilePath = Paths.get("c:/dump2/mytextfile.txt");

    Path zipFilePath = Paths.get("c:/dump2/myarchive.zip");
    try( FileSystem fs = FileSystems.newFileSystem(zipFilePath, null) ){
        Path fileInsideZipPath = fs.getPath("/mytextfile.txt");
        Files.copy(myFilePath, fileInsideZipPath);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

ZipFileSystem Provider を使用して zip を「マウント」します。次に、必要なものをコピーできます。変更はfs.close()

続きを読む@オラクル

于 2012-12-09T13:41:08.303 に答える