Java获取压缩包内文件数_使用java.util.zip.ZipFile,压缩包内文件数量过多则报错问题....

引入的jar包不对,或者你的压缩文件不标准。62616964757a686964616fe78988e69d8331333365646331一般就会报这个错误。关于上面英语的翻译:Key features(主要特性):Create, Add, Extract, Update, Remove files from a Zip file(针对ZIP压缩文件创建、添加、抽出、更新和移除文件)Read/Write password protected Zip files(读写有密码保护的Zip文件)Supports AES 128/256 Encryption(支持AES 128/256算法加密)Supports Standard Zip Encryption(支持标准Zip算法加密)Supports Zip64 format(支持zip64格式)Supports Store (No Compression) and Deflate compression method(支持Store(非压缩)和Deflate压缩方法---不太明白)Create or extract files from Split Zip files (Ex: z01, z02,...zip)(针对分块zip文件创建和抽出文件)Supports Unicode file names(支持Unicode编码文件名)Progress Monitor(进度监控),我今天也遇到了,只起jboss服务正常无报错,将war包放入deployments文件夹下再自动部署就会报这个错。是war包的问题,应该是ZIP文件有问题,java.util.zip.ZipException:如果某种 ZIP 异常发生,则抛出此错误,你先确定你的ZIP有没有问题,再一个,如果你这个文件是刚生成的,确认一下,流有没有关闭。流非正常关闭,有可能打不开本回答被提问者采纳www.mh456.com防采集。

import org.apache.commons.io.IOUtils;/**使用apache 的 IOUtils 能解决**/ File zip = new File("");// 你的文件62616964757a686964616fe58685e5aeb931333332616362 FileInputStream fin = new FileInputStream(zip); ZipInputStream zin = new ZipInputStream(fin); ZipEntry ze = null; while ((ze = zin.getNextEntry()) != null) { FileOutputStream fout = new FileOutputStream(new File("", ze.getName())); IOUtils.copy(zin, fout); IOUtils.closeQuietly(fout); zin.closeEntry(); } IOUtils.closeQuietly(zin);嗯。还有其他的方法你可以看一下。 IOUtils 的方法。追问apache的这个第三方jar晚点我去试,不过我最希望的最好还是用ZipFile,引入第三方包是最后迫不得已的做法.在winXP 使用ZipFile不会出现文件数量过多的问题,只有win7 和win2008会出现.不知道可不可以改ZipFile相关类的某些参数能解决这问题么?

import java.io.IOException; import java.util.Enumeration; import java.util.zip.ZipEntry; /** * 获得zip文件里的所有文件 * @author Administrator * */ public class ZipFile { public ZipFile() throws IOException { java.util.zip.ZipF

0d420144ccbffe18d77b5caa7b4c79eb.png

内容来自www.mh456.com请勿采集。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用JavaZipInputStream和ZipOutputStream来完成压缩包内部文件的重命名操作。具体步骤如下: 1. 使用ZipInputStream读取原始压缩包,并创建ZipOutputStream用于写入修改后的文件。 2. 遍历ZipInputStream中的每一个ZipEntry,即压缩包内部的每一个文件。 3. 对于需要修改名称的文件,创建一个新的ZipEntry,并设置新的名称和其他属性。 4. 使用ZipOutputStream将新的ZipEntry写入到压缩包中。 5. 如果不需要修改名称的文件,则直接使用ZipEntry的据写入到ZipOutputStream中。 6. 最后,关闭ZipInputStream和ZipOutputStream以及相关资源。 下面是一段示例代码: ```java import java.io.*; import java.util.zip.*; public class RenameZipEntry { public static void main(String[] args) { String zipFile = "test.zip"; String oldName = "file1.txt"; String newName = "newfile1.txt"; try { // 创建ZipInputStream读取原始压缩包 ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile)); // 创建ZipOutputStream用于写入修改后的文件 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("new_" + zipFile)); // 遍历ZipInputStream中的每一个ZipEntry ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { // 如果是要修改名称的文件 if (entry.getName().equals(oldName)) { // 创建一个新的ZipEntry,并设置新的名称和其他属性 ZipEntry newEntry = new ZipEntry(newName); newEntry.setSize(entry.getSize()); newEntry.setCompressedSize(entry.getCompressedSize()); newEntry.setCrc(entry.getCrc()); newEntry.setMethod(entry.getMethod()); newEntry.setTime(entry.getTime()); // 使用ZipOutputStream将新的ZipEntry写入到压缩包中 zos.putNextEntry(newEntry); } else { // 如果不需要修改名称的文件,则直接使用ZipEntry的据写入到ZipOutputStream中 zos.putNextEntry(entry); } // 将ZipInputStream中的据复制到ZipOutputStream中 byte[] buffer = new byte[1024]; int len; while ((len = zis.read(buffer)) > 0) { zos.write(buffer, 0, len); } // 关闭当前ZipEntry zos.closeEntry(); } // 关闭ZipInputStream和ZipOutputStream以及相关资源 zis.close(); zos.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 在上面的示例代码中,我们将原始压缩包中名称为"file1.txt"的文件重命名为"newfile1.txt",并将修改后的文件写入到"new_test.zip"中。你可以根据实际需要修改文件名和压缩包名称。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值