我想更新位于zipfile内的文本文件的内容.
我无法找到如何执行此操作,以下代码无法正常工作.
谢谢你的帮助!!
import java.util.zip.ZipFile import java.util.zip.ZipEntry import java.util.zip.ZipOutputStream String zipFileFullPath = "C:/path/to/myzipfile/test.zip" ZipFile zipFile = new ZipFile(zipFileFullPath) ZipEntry entry = zipFile.getEntry ( "someFile.txt" ) if(entry){ InputStream input = zipFile.getInputStream(entry) BufferedReader br = new BufferedReader(new InputStreamReader(input,"UTF-8")) String s = null StringBuffer sb = new StringBuffer() while ((s=br.readLine())!=null){ sb.append(s) } sb.append("adding some text..") ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileFullPath)) out.putNextEntry(new ZipEntry("someFile.txt")); int length InputStream fin = new ByteArrayInputStream(sb.toString().getBytes("UTF8")) while((length = fin.read(sb)) > 0) { out.write(sb,length) } out.closeEntry() }
解决方法
只是对@Opal的答案进行了一些细微的修改,我只是:
>尽可能使用groovy方法
>打包方法
Groovy Snippet
void updateZipEntry(String zipFile,String zipEntry,String newContent){ def zin = new ZipFile(zipFile) def tmp = File.createTempFile("temp_${System.nanoTime()}",'.zip') tmp.withOutputStream { os -> def zos = new ZipOutputStream(os) zin.entries().each { entry -> def isReplaced = entry.name == zipEntry zos.putNextEntry(isReplaced ? new ZipEntry(zipEntry) : entry) zos << (isReplaced ? newContent.getBytes('UTF8') : zin.getInputStream(entry).bytes ) zos.closeEntry() } zos.close() } zin.close() assert new File(zipFile).delete() tmp.renameTo(zipFile) }
用法
updateZipEntry('/tmp/file.zip','META-INF/web.xml','<foobar>new content!</foobar>')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。