思路:

  1)、读取zip中的文件并将除了重名文件之外的文件转存到中转zip文件中。

  2)、往中转文件中插入txt文件。

  3)、删除原zip文件。

  4)、将中转zip文件重命名为原zip文件。

前提,txt和zip文件需要存在,本代码中未加判断。

具体代码见下:

package zip;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream; public class UpdateZip {   private static final byte[] BUFFER = new byte[4096 * 1024];   public static void main(String[] args) throws Exception {
    //路径
    String path = "f:";
    //待插入zip
    String zipname = "a.zip";
    //待插入文件
    String txtname = "c.txt";
    //构建zip和文件准确路径
    String oldzip = path+"/"+zipname;
    //构建中转zip路径
    String newzip = path+"/b.zip";
    String txt = path+"/"+txtname;
    //获取文件
    ZipFile war = new ZipFile(path+"/"+zipname);
    ZipOutputStream append = new ZipOutputStream(new FileOutputStream(newzip));
    //将待插入zip中文件复制到中转zip中
    copytonew(war,append,txtname);
    //往中转zip中插入待插入文件
    insertnewfile(append,txt);
    close(war,append);
    //删除原来zip
    delete(oldzip);
    //将中转zip重命名为原来zip
    rename(oldzip,newzip);
  }
  public static void close(ZipFile war,ZipOutputStream append){
    try {
      war.close();
      append.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public static void delete(String oldzip){
    File file = new File(oldzip);
    file.delete();
    System.out.println("delete:"+oldzip);
  }
  public static void rename(String oldzip,String newzip){
    File newfile = new File(oldzip);
    File file = new File(newzip);
    file.renameTo(newfile);
    System.out.println("rename:"+oldzip+"------》"+newzip);
  }
  public static void insertnewfile(ZipOutputStream append,String txt){
    File file = new File(txt);
    FileInputStream fis = null;
    BufferedInputStream bis = null;
    try {
      fis = new FileInputStream(file);
      bis = new BufferedInputStream(fis);
      ZipEntry entry = new ZipEntry(file.getName());
      append.putNextEntry(entry);
      int length;
      byte[] buffer = new byte[4096];
      while ((length = bis.read(buffer)) != -1) {
        append.write(buffer, 0, length);
        System.out.println("insert:"+txt);
      }
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        bis.close();
        fis.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }
  public static void copy(InputStream input, OutputStream output) throws IOException {
    int bytesRead;
    while ((bytesRead = input.read(BUFFER))!= -1) {
      output.write(BUFFER, 0, bytesRead);
    }
  }
  public static void copytonew(ZipFile war,ZipOutputStream append,String txtname){
    Enumeration<? extends ZipEntry> entries = war.entries();
    while (entries.hasMoreElements()) {
      ZipEntry e = entries.nextElement();
      if(!e.getName().equals(txtname)){
        System.out.println("copy: " + e.getName());
        try {
          append.putNextEntry(e);
          if (!e.isDirectory()) {
            copy(war.getInputStream(e), append);
          }
          append.closeEntry();
        } catch (IOException e1) {
          e1.printStackTrace();
        }
      }
    }
  }
}

当然,如果你们有好的方法欢迎指导。

java操作zip文件的更多相关文章

  1. Java使用基本JDK操作ZIP文件以及zip文件的加密、解密等功能

    Java使用基本JDK操作ZIP文件 http://blog.csdn.net/zhyh1986/article/details/7723649 Java解压和压缩带密码的zip文件 http://b ...

  2. Java处理ZIP文件的解决方案——Zip4J(不解压直接通过InputStream形式读取其中的文件,解决中文乱码)

    一.JDK内置操作Zip文件其实,在JDK中已经存在操作ZIP的工具类:ZipInputStream. 基本使用: public static Map<String, String> re ...

  3. Java操作属性文件,支持新增或更新多个属性

    Java操作属性文件.支持新增或更新多个属性 一.更新或新增单个属性的方法 /** * 写入properties信息 * @param filePath 绝对路径(包含文件名称和后缀名) * @par ...

  4. Python操作Zip文件

    Python操作Zip文件 需要使用到zipfile模块 读取Zip文件 随便一个zip文件,我这里用了bb.zip,就是一个文件夹bb,里面有个文件aa.txt. import zipfile # ...

  5. java 生成zip文件并导出

    总结一下,关于Java下载zip文件并导出的方法,浏览器导出. String downloadName = "下载文件名称.zip"; downloadName = Browser ...

  6. Java操作zip压缩和解压缩文件工具类

    需要用到ant.jar(这里使用的是ant-1.6.5.jar) import java.io.File; import java.io.FileInputStream; import java.io ...

  7. java 操作excel 文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  8. 使用commons-compress操作zip文件(压缩和解压缩)

    http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ...

  9. Java操作xml文件

    Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...

随机推荐

  1. C#如何发布项目 发布软件

    如下图所示,我随便搞了一个小软件,为了测试还在Debug目录下放了一个一副图片和一个LOGO   直接点击生成-发布 "软件名称",然后点击完成   结果报错说没找到SignToo ...

  2. HDU-3295-An interesting mobile game(BFS+DFS)

    Problem Description XQ,one of the three Sailormoon girls,is usually playing mobile games on the clas ...

  3. python批量删除文件

    敲代码測试时总会碰到要删除日志目录下的日志或者删除一些历史文件.每次都会生成,再測试的时候为了查找错误原因方便总是要在測试前删除这些文件.手动删除比較麻烦.所以写一个批量删除脚本 import os ...

  4. APP漏洞自动化扫描专业评测报告

    一.前言 目前在业界有很多自动化检测APP安全性的在线扫描平台.为了了解目前国内移动APP在线漏洞扫描平台的发展情况,我进行了一次移动安全扫描平台的评测分析:主要从漏洞项对比.扫描能力对比以及扫描结果 ...

  5. 省市县三级联动js代码

    省市县三级联动菜单,JS全国省市县(区)联动代码,一般可以用于用户注册或分类信息二手交易网站,需要的朋友直接复制代码就可以用了,不过有朋友反馈说缺少某些城市,具体缺少哪个尚不知,请想用的朋友自己补全吧 ...

  6. 从Linux内核升级的必要性说开去

    Linux内核更新超级频繁,可是有必要时刻升级吗?个人感觉没有必要,可是你要时刻关注新特性列表,然后把自己的内核升级到离最新版本号差一两个月公布的版本号而不是最新版本号.以保证稳定性,由于一两个月的时 ...

  7. mysql复制延迟监控脚本

    #!/bin/sh #ocpyang@126.com #repdelay.sh #查看复制延迟详细多少event #####1.juede the rep slave status export bl ...

  8. Android清单文件具体解释(四) ---- backupAgent的使用方法

    在<application>节点中有一个很重要的属性,那就是backupAgent.这里我们将它单独列出来,从基本含义,使用方法及其相关属性等方面来具体介绍一下. 1.backupAgen ...

  9. oracle 11g GRID 中 关于 OLR 须要知道的一些内容

     oracle 11g GRID 中 关于 OLR 须要知道的一些内容 1.检查olr 的状态: [root@vmrac1 ~]# ocrcheck -local Status of Oracle ...

  10. 开发第一个Template

    TEMPLATE的静态变量,当时我们一句话就带过了.TEMPLATE静态变量下面有好几个键值对,把"BACKEND"后面的值改成我们想要用的模板引擎就可以了.我们项目使用Djang ...