• IO流-ZIP文档


    java中通常使用ZipInputStream来读ZIP文档

    ZIP文档(通常)以压缩格式存储了一个或多个文件,每个ZIP文档都有一个包含诸如文件

    名字和所使用的压缩方法等信息的头。在Java中,可以使用ZipInputStream来读入ZIP文档。

    你可能需要浏览文档中每个单独的项,getNextEntry方法就可以返回一个描述这些项的

    ZipEntry类型的对象。ZipInputStream的read方法被修改为在碰到当前项的结尾时返回-1

    (而不是碰到ZIP文件的末尾) ,然后你必须调用closeEntry来读入下一项。下面是典型通读ZIP文件的代码序列:

    ZipInputStream zip = new ZipInputStream(new FileInputStream("test.zip"));
    
    ZipEntry entry;
    
    // getNextEntry()为下一项返回ZipEntry对象,否则没有更多的项时返回null。
    
    while((entry = zip.getNextEntry()) != null){
    
        // closeEntry()关闭这个ZIP文件中当前打开的项。之后可以通过使用        getNextEntry()读入下一项
    
        zip.closeEntry();
    
    }
    
    zip.close();    

    当希望读入某个ZIP项的内容时,我们可能并不想使用原生的read方法,通常,我们将使用某个更能胜任的流过滤器的方法。例如,为了读入ZIP文件内部的一个文本文件,我们可以使用下面的循环:

    Scanner s = new Scanner(zip);

    while(s.hasNextLine()){

    s.nextLine();

    }

    要写出到ZIP文件,可以使用ZipOutputStream,而对于你希望放入到ZIP文件中的每一项,

    都应该创建一个ZipEntry对象,并将文件名传递给ZipEntry的构造器,它将设置其他诸如文件日期和解压缩方法等参数。如果需要,你可以覆盖这些设置。然后,你需要调用

    ZipOutputStream的putNextEntry方法来开始写出新文件,并将文件数据发送到ZIP流中。当

    完成时,需要调用closeEntry:

    ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("test.zip"));
    
    ZipEntry ze1 = new ZipEntry("test1.txt");
    
    ZipEntry ze2 = new ZipEntry("test2.txt");
    
    // putNextEntry(ZipEntry ze)将给定的ZipEntry中的信息写出到流中,并定为用于写出数据的流,然后这些数据可以通过write()写出到这个流中
    
    zip.putNextEntry(ze1);
    
    zip.putNextEntry(ze2);
    
    zip.closeEntry();
    
    zip.close();

    API:

    Java.util.zip.ZipEntry

    Java.util.zip.ZipFile

    (1) ZipFile(String name) ZipFile(File file)

    创建一个ZipFile,用于从给定的字符串或File对象中读入数据。

    (2) Enumeration entries()返回一个Enumeration对象,它枚举了描述这个ZipFile中各个项的ZipEntry对象。

    (3) ZipEntry getEntry(String name) 返回给定名字所对应的项,或者在没有对应项的时候返回null。

    (4) InputStream getInputStream(ZipEntry ze) 返回用于给定项的InputStream。

    (5) String getName()返回这个ZIP文件的路径。

  • 相关阅读:
    hadoop hbase 完全分布式
    在linux 下安装 solr 的IK中文分词
    Solr的多核配置和分布式
    vi命令
    SilverLigth的Chart不要图例(Legend)的方法
    【转载】Silverlight 应用 WCF RIA Services 在 IIS6 部署问题总结
    上下文菜单点击获取ContextMenu实例方法
    WPF中StringFormat的用法可以参照C#中string.Format的用法
    WPF的转换器中使用Brush应注意问题
    VS2010 SL4解决方案前端发现不了解决方案中WCF服务问题
  • 原文地址:https://www.cnblogs.com/orlion/p/4830464.html
Copyright © 2020-2023  润新知