java如何删除压缩文件中的条目,在线等~
今天做了一个小项目,需要动态的改变压缩文件中条目数量,请教大神,该如何删除条目,API中未找到~ --------------------编程问答-------------------- 有木有高人啊??? --------------------编程问答-------------------- Java本身只有zip格式的支持,至于rar那是商业压缩算法,需要付费的, --------------------编程问答-------------------- 对,就zip格式的,我要删除某个条目,能实现么? --------------------编程问答--------------------用程序先解压缩,删除指定的条目,再打成压缩包。 --------------------编程问答--------------------
无法在zip文件中更改是么?我这个由于数据量比较大,不想这么做,太浪费时间了 --------------------编程问答--------------------
对,就zip格式的,我要删除某个条目,能实现么?
用程序先解压缩,删除指定的条目,再打成压缩包。
无法在zip文件中更改是么?我这个由于数据量比较大,不想这么做,太浪费时间了
就算不用程序实现,也没法直接删除的。。 --------------------编程问答--------------------
对,就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删除里面的文件好像也是解压再重压 --------------------编程问答--------------------
z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。
API中不行吧,对于已经生成的zip文件,好像既不能追加文件也不能删除文件,有没有三方的jar包可以实现呢? --------------------编程问答--------------------
winrar删除里面的文件好像也是解压再重压
那向zip中添加文件呢?对于已经生成的zip,再添加文件就把以前的覆盖了啊 --------------------编程问答--------------------
z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。
API中不行吧,对于已经生成的zip文件,好像既不能追加文件也不能删除文件,有没有三方的jar包可以实现呢?
你可以把已经生成的zip包解压开,把你需要的文件从新压缩一个ZIP包这样不就实现了删除吗 --------------------编程问答--------------------
z这个java API中就能做 ,用其他的jar包工具也能做 。我做过。要是没解决 我给你整理点东东。
API中不行吧,对于已经生成的zip文件,好像既不能追加文件也不能删除文件,有没有三方的jar包可以实现呢?
你可以把已经生成的zip包解压开,把你需要的文件从新压缩一个ZIP包这样不就实现了删除吗
这样做是可以,问题是数据量比较大,先解压再压缩太浪费时间,再把文件返回给客户端的话,等待时间太长了 --------------------编程问答-------------------- 那我就不知道怎么 直接删除了,但是追加没问题。你可以试试 我以前做的要不了多少时间的 。 就是有现成的也得这么做,只不过是写好的 。 --------------------编程问答--------------------
那我就不知道怎么 直接删除了,但是追加没问题。你可以试试 我以前做的要不了多少时间的 。 就是有现成的也得这么做,只不过是写好的 。
追加的也行,需要用三方的jar包么,我追加的时候都是把原来的文件覆盖了 --------------------编程问答-------------------- commons-fileupload-1.2.2.jar 我用的是这个包 你看下10L,追加就是添加个压缩项吗。 --------------------编程问答-------------------- 嗯,就是添加压缩项。
ArchiveEntry entry = new ZipArchiveEntry(relativeName);
IOUtils.copy(origin, zos);
这2句就可以实现添加压缩项而不覆盖么?
补充:Java , Java EE