java.util.zip?
FileInputStream fis = new FileInputStream("figs.zip"); ZipInputStream zin = new ZipInputStream(new BufferedInputStream(fis));
ZIP输入流打开后,你可以使用getNextEntry方法来读取ZIP文件中的条目数,该方法返回一个ZipEntry对象。如果到达文件的尾部,getNextEntry返回null:
ZipEntry entry; while((entry = zin.getNextEntry()) != null) { // extract data // open output streams }
现在,你应该建立一个输出流,如下所示:
int BUFFER = 2048; FileOutputStream fos = new FileOutputStream(entry.getName()); BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
注意:在这段代码中我们用BufferedOutputStream代替了ZIPOutputStream。ZIPOutputStream和GZIPOutputStream使用内置的512字节缓冲。当缓冲区的大小大于512字节时,使用BufferedOutputStream才是正确的(例子中设置为2048)。ZIPOutputStream不允许你设置缓冲区的大小,GZIPOutputStream也是一样,但创建 GZIPOutputStream 对象时可以通过构造函数的参数指定内置的缓冲尺寸。
这段代码中,使用ZIP内含的条目名称创建一个文件输出流。可以使用entry.getName来得到它的返回句柄。接着读出被压缩的源数据,然后写入输出流:
while ((count = zin.read(data, 0, BUFFER)) != -1) { //System.out.write(x); dest.write(data, 0, count); }
最后,不要忘记关闭输入和输出流:
dest.flush(); dest.close(); zin.close();
相关推荐
java实现压缩和解压.doc
java实现压缩和解压.doc
Exception in thread “main“ java.util.zip.ZipException: zip file is empty
Exception in thread “main” java.util.zip.ZipException: zip file is empty 在构建flutter项目时,出现了如下错误: Exception in thread "main" java.util.zip.ZipException: zip file is empty at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1581) at
URLClassloader->sun.misc.InvalidJarIndexException&java.util.zip.ZipException
最近在使用URLClassloader的加载JAR包中的资源的时候,在系统运行期将JAR包替换成新编译的包(包中数据未变),报错: Caused by: sun.misc.InvalidJarIndexException: Invalid index at sun.misc.URLClassPath$JarLoader.getResource(URLClassPath.java:8
java.lang.NoSuchMethodError: org.apache.hadoop.fs.FSOutputSummer.<init>(Ljava/util/zip/Checksum;II)V
环境: - Spark 2.11-2.0.2版本(在Eclipse下面使用Maven引入spark-core_2.11-2.0.2.jar) - Hadoop 2.6.5版本 使用Spark的Java APIs(saveAsTextFile方法)把大量的日志导入远程的HDFS,遇到下面的java.lang.NoSuchMethodError: org.apache.hadoo
JAVA解压和压缩详解
JAVA解压和压缩详解,内有详细的使用例子


非技术区
