IO压缩流问题,为什么老是出现no current ZIP entry错误

问题描述

我Debug了查了很久··但是还是查不出所以然啦,可能是方法不对什么,请大侠帮帮忙importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.zip.ZipException;importjava.util.zip.ZipOutputStream;importjava.util.zip.ZipEntry;publicclassZipOutputStreamTest2{staticZipOutputStreamzip=null;staticInputStreamin=null;publicstaticvoidmain(String[]args)throwsException{FileZfile=newFile("D:"+File.separator+"javaTest"+File.separator+"ZipOutputStream2.zip");FileOfile=newFile("D:"+File.separator+"javaTest"+File.separator+"day");zip=newZipOutputStream(newZipOutputStream(newFileOutputStream(Zfile)));ZipEntryfirstEntry=newZipEntry(Ofile.getName());FileZip(Ofile,firstEntry);in.close();zip.close();}//如果文件夹里面还有文件夹,则要采用递归的方法压缩publicstaticvoidFileZip(FileInputFile,ZipEntryoldEntry)throwsException{FileInputFileCOPY=InputFile;ZipEntryoldEntryCOPY=oldEntry;inttemp=0;if(InputFileCOPY.isDirectory()){File[]list=InputFileCOPY.listFiles();for(inti=0;i<list.length;i++){if(list[i].isDirectory()){ZipEntrynewEntry=newZipEntry(oldEntryCOPY.getName()+File.separator+list[i].getName());FileZip(list[i],newEntry);}else{in=newFileInputStream(list[i]);ZipEntryze=newZipEntry(oldEntryCOPY.getName()+File.separator+list[i].getName());zip.putNextEntry(ze);while((temp=in.read())!=-1){zip.write(temp);}}}}}}

解决方案

解决方案二:
publicclassFieToZip{staticfinalintBUFFER=2048;staticbooleanflag=false;publicstaticFileZipSubdirectory(FilemyDir)throwsIOException{BufferedInputStreamorigin=null;FilezipFile=newFile("c://"+myDir.getName()+".zip");ZipOutputStreamout=newZipOutputStream(newFileOutputStream(zipFile));FiledirContents[]=myDir.listFiles();FiletempFile=null;try{for(inti=0;i<dirContents.length;i++){if(dirContents[i].isDirectory()){tempFile=ZipSubdirectory(dirContents[i]);flag=true;}else{tempFile=dirContents[i];flag=false;}FileInputStreamfis=newFileInputStream(tempFile);origin=newBufferedInputStream(fis,BUFFER);ZipEntryentry=neworg.apache.tools.zip.ZipEntry(tempFile.getName());bytedata[]=newbyte[BUFFER];intcount;out.putNextEntry(entry);while((count=origin.read(data,0,BUFFER))!=-1){out.write(data,0,count);}out.closeEntry();origin.close();if(flag==true){flag=tempFile.delete();}}}catch(Exceptione){System.out.println(e);}out.close();returnzipFile;}}

解决方案三:
???楼上是什么意思
解决方案四:
我怎么什么也不会,我看我是找不到工作了
解决方案五:
楼上是不是混分数的啊····
解决方案六:
压缩流没有用过
解决方案七:
丫的,这个错误真难找。zip=newZipOutputStream(newZipOutputStream(newFileOutputStream(Zfile)));

zip=newZipOutputStream(newFileOutputStream(Zfile));

时间: 2024-09-12 09:11:39

IO压缩流问题,为什么老是出现no current ZIP entry错误的相关文章

Delphi压缩流和解压流的应用

软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩,但美中不足的是,该流在Delphi 的帮助中没有详细的说明,使得它们在使用起来有一定得困难.其实在Delphi系统中提供了这两个类的源代码和库.保存在Delphi 光盘的InfoExtraslib Src和InfoExtraslibObj目录中(其中OBJ目录中保存的是库,Src目录中保存的是源代

Delphi中压缩流和解压流的应用

软件开发者不免都要遇到压缩数据的问题!经常使用Delphi的朋友都知道,它为我们提供了两个流类(TCompressionStream和TDecompressionStream)来完成数据的压缩和解压缩,但美中不足的是,该流在Delphi 的帮助中没有详细的说明,使得它们在使用起来有一定得困难.其实在Delphi系统中提供了这两个类的源代码和库.保存在Delphi 光盘的\Info\Extras\Zlib\ Src和\Info\Extras\Zlib\Obj目录中(其中OBJ目录中保存的是库,Sr

Java IO包装流如何关闭

问题: (1)JAVA的IO流使用了装饰模式,关闭最外面的流的时候会自动调用被包装的流的close()方吗? (2)如果按顺序关闭流,是从内层流到外层流关闭还是从外层到内存关闭? 问题(1)解释: 如下例子代码: 1 2 3   FileInputStream is = new FileInputStream(".");      BufferedInputStream bis = new BufferedInputStream(is);     bis.close(); 从设计模式上

Java IO: 字符流的Buffered和Filter

本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.BufferedWriter.FilterReader.FilterWriter. BufferedReader 原文链接 BufferedReader能为字符输入流提供缓冲区,可以提高许多IO处理的速度.你可以一次读取一大块的数据,而不需要每次从网络或者磁盘中一次读取一个字节.特别是在访问大量磁盘数据时,缓冲通常会让IO快上许多. BufferedReader和BufferedInputStrea

Java IO: 字符流的Piped和CharArray

本章节将简要介绍管道与字符数组相关的reader和writer,主要涉及PipedReader.PipedWriter.CharArrayReader.CharArrayWriter. PipedReader 原文链接 PipedReader能够从管道中读取字符流.与PipedInputStream类似,不同的是PipedReader读取的是字符而非字节.换句话说,PipedReader用于读取管道中的文本.代码如下: Reader reader = new PipedReader(pipedW

java io对象流问题

问题描述 我把一个对象用Objectoutputstream,对象流写进文本里,然后还写入了一些其他的文字,不是对象,我在读取这个文件的时候读出了这个对象后剩下的文字应该怎么读出来?能换输入流吗?我用Objectinputstream读对象后,再读内容报错了Exceptioninthread"main"java.io.StreamCorruptedException:invalidtypecode:D3 解决方案 解决方案二:再换输入流,怎么定位那个不是对象的字符?一般写入对象,即对象

java 中IO关闭流

问题描述 public class Test_01 {public static void main(String[] args) {FileInputStream fis=null;try { fis=new FileInputStream("D:\workspace\TestIO\src\TestTO_01\TestFile.java"); byte[] buf=new byte[1024]; int c=0; try {while((c=fis.read(buf))>=0)

android-Android proguard 时报错,Duplicate zip entry

问题描述 Android proguard 时报错,Duplicate zip entry FAILURE: Build failed with an exception. What went wrong: Execution failed for task ':0.2phone:proguardRelease'. > java.io.IOException: Can't write D:.2phonebuildintermediatesclasses-proguardreleaseclasse

基于Zlib算法的流压缩、字符串压缩源码

原文:基于Zlib算法的流压缩.字符串压缩源码 Zlib.net官方源码demo中提供了压缩文件的源码算法.处于项目研发的需要,我需要对内存流进行压缩,由于zlib.net并无相关文字帮助只能自己看源码解决.通过对SharpZipLib的demo研究,写出了Zlib.net的流压缩算法. 中间花费了不少的时间,应为通过Stream压缩出来的数据全是空的,呵呵,主要原因就是忽略了ZOutputStream.flush()和ZOutPutStream.close()方法.大家自己看吧.关于字符串压缩