当前位置:编程学习 > JAVA >>

java如何删除压缩文件中的条目,在线等~

今天做了一个小项目,需要动态的改变压缩文件中条目数量,请教大神,该如何删除条目,API中未找到~ --------------------编程问答-------------------- 有木有高人啊??? --------------------编程问答-------------------- Java本身只有zip格式的支持,至于rar那是商业压缩算法,需要付费的, --------------------编程问答-------------------- 对,就zip格式的,我要删除某个条目,能实现么? --------------------编程问答--------------------
引用 3 楼 aa234590 的回复:
对,就zip格式的,我要删除某个条目,能实现么?

用程序先解压缩,删除指定的条目,再打成压缩包。 --------------------编程问答--------------------
引用 4 楼 huxiweng 的回复:
Quote: 引用 3 楼 aa234590 的回复:

对,就zip格式的,我要删除某个条目,能实现么?

用程序先解压缩,删除指定的条目,再打成压缩包。

无法在zip文件中更改是么?我这个由于数据量比较大,不想这么做,太浪费时间了 --------------------编程问答--------------------
引用 5 楼 aa234590 的回复:
Quote: 引用 4 楼 huxiweng 的回复:

Quote: 引用 3 楼 aa234590 的回复:

对,就zip格式的,我要删除某个条目,能实现么?

用程序先解压缩,删除指定的条目,再打成压缩包。

无法在zip文件中更改是么?我这个由于数据量比较大,不想这么做,太浪费时间了

就算不用程序实现,也没法直接删除的。。 --------------------编程问答--------------------
引用 6 楼 huxiweng 的回复:
Quote: 引用 5 楼 aa234590 的回复:

Quote: 引用 4 楼 huxiweng 的回复:

Quote: 引用 3 楼 aa234590 的回复:

对,就zip格式的,我要删除某个条目,能实现么?

用程序先解压缩,删除指定的条目,再打成压缩包。

无法在zip文件中更改是么?我这个由于数据量比较大,不想这么做,太浪费时间了

就算不用程序实现,也没法直接删除的。。

win rar这个软件还是可以的 --------------------编程问答-------------------- z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。 --------------------编程问答-------------------- 解压就是把压缩包文件生成流 放到

 ZipArchiveInputStream is = new ZipArchiveInputStream(new BufferedInputStream(inputstream,2048),"GBK",true);

遍历这个文件 里边的ArchiveEntry项都是不包括包名的文件,也有路劲 的ArchiveEntry 可以输出到不同的文件 也可以放到数据库中

  protected void extract(ArchiveInputStream is, File targetDir)
      throws IOException {
    try {
      if (targetDir.exists()) {
        FileUtils.forceDelete(targetDir);
      }
      targetDir.mkdirs();
      ArchiveEntry entry = is.getNextEntry();
      while (entry != null) {
        String name = entry.getName();
//        name = name.substring(name.indexOf("/") + 1);
        File file = new File(targetDir, name);
        if (entry.isDirectory()) {
          file.mkdirs();
        } else {
          file.getParentFile().mkdirs();
          OutputStream os = new FileOutputStream(file);
          try {
            IOUtils.copy(is, os);
          } finally {
            IOUtils.closeQuietly(os);
          }
        }
        entry = is.getNextEntry();
      }
    } finally {
      is.close();
    }
  } --------------------编程问答--------------------    生成zip包后下载 ,就是把文件输入流放到转换成压缩包后的流中 
ZipArchiveOutputStream zos = new ZipArchiveOutputStream(response.getOutputStream());
ArchiveEntry entry = new ZipArchiveEntry(relativeName); 生成压缩项放到压缩流中
最后把这个文件流 IOUtils.copy(origin, zos);
--------------------编程问答-------------------- winrar删除里面的文件好像也是解压再重压 --------------------编程问答--------------------
引用 8 楼 u012463264 的回复:
z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。

API中不行吧,对于已经生成的zip文件,好像既不能追加文件也不能删除文件,有没有三方的jar包可以实现呢? --------------------编程问答--------------------
引用 11 楼 sunbo624 的回复:
winrar删除里面的文件好像也是解压再重压

那向zip中添加文件呢?对于已经生成的zip,再添加文件就把以前的覆盖了啊 --------------------编程问答--------------------
引用 12 楼 aa234590 的回复:
Quote: 引用 8 楼 u012463264 的回复:

z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。

API中不行吧,对于已经生成的zip文件,好像既不能追加文件也不能删除文件,有没有三方的jar包可以实现呢?

你可以把已经生成的zip包解压开,把你需要的文件从新压缩一个ZIP包这样不就实现了删除吗 --------------------编程问答--------------------
引用 14 楼 u012463264 的回复:
Quote: 引用 12 楼 aa234590 的回复:

Quote: 引用 8 楼 u012463264 的回复:

z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。

API中不行吧,对于已经生成的zip文件,好像既不能追加文件也不能删除文件,有没有三方的jar包可以实现呢?

你可以把已经生成的zip包解压开,把你需要的文件从新压缩一个ZIP包这样不就实现了删除吗

这样做是可以,问题是数据量比较大,先解压再压缩太浪费时间,再把文件返回给客户端的话,等待时间太长了 --------------------编程问答-------------------- 那我就不知道怎么 直接删除了,但是追加没问题。你可以试试 我以前做的要不了多少时间的 。 就是有现成的也得这么做,只不过是写好的 。 --------------------编程问答--------------------
引用 16 楼 u012463264 的回复:
那我就不知道怎么 直接删除了,但是追加没问题。你可以试试 我以前做的要不了多少时间的 。 就是有现成的也得这么做,只不过是写好的 。

追加的也行,需要用三方的jar包么,我追加的时候都是把原来的文件覆盖了 --------------------编程问答-------------------- commons-fileupload-1.2.2.jar 我用的是这个包 你看下10L,追加就是添加个压缩项吗。 --------------------编程问答-------------------- 嗯,就是添加压缩项。
ArchiveEntry entry = new ZipArchiveEntry(relativeName); 
IOUtils.copy(origin, zos);
这2句就可以实现添加压缩项而不覆盖么?
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,