Java.util.zip替换单个zip文件 - java

问题

我有一个现有的zip文件“main.zip”。我要替换其中的单个文件“say main.zip/foo”。

我知道:

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

但是,这并不能满足我的要求,因为它会创建一个新的Zip文件-因此,我还必须在main.zip中添加所有现有条目。

题:

有没有一种方法可以用Java“替换” Zip存档中的单个文件? (无需重新创建新的zip存档并复制所有旧数据)。

参考方案

我觉得你很幸运。

结合使用Java 7 java.nio.file.FileSystemFiles.copy(),我设法在一瞬间将文本文件插入到大型zipfile中。

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()

Read more @ oracle

java.util.Scanner不返回到提示 - java

import java.util.Scanner; class newClass { public static void main(String args[]) { Scanner s = new Scanner(System.in); while (s.hasNext()) { System.out.println(s.next()); } s.clos…

java.util.HashSet是否不遵循其规范? - java

作为相对的Java noob,我很困惑地发现以下内容:Point.java:public class Point { ... public boolean equals(Point other) { return x == other.x && y == other.y; } ... } Edge.java:public class Edge…

使用java.util.properties存储ArrayList和HashMap - java

如何使用ArrayList存储HashMap和/或java.util.properties变量?如果不可能,可以使用其他什么类来存储应用程序配置? 参考方案 如果只需要将集合序列化为字符串,我强烈建议XStream。它使用反射将类序列化为XML。如果默认行为对您要序列化的类不起作用,则有文档,但是到目前为止,以下内容对我而言一直有效:XStream xstr…

Java将oracle时间戳解析为date.util.date - java

我想将oracle时间戳(01-MAY-12 01.00.47.000000000 PM)解析为java.util.Date我用这个:Date dateStart=new SimpleDateFormat("yy-MM-dd HH:mm:ss.S").parse("01-MAY-12 01.00.47.000000000 PM&…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)