当前位置:  技术问答>java相关

请问用这两个压缩程序可不可以改一下用来压缩文件流?

    来源: 互联网  发布时间:2015-09-20

    本文导语:  请问用这两个压缩程序可不可以改一下用来压缩文件流? 因为现在在某一个方法里面只是需要一个FileInputStream作为参数传入来,现在压缩与解压缩可用的,但我还未将文件经过下面两个程序压缩,只是将原文件的File...

请问用这两个压缩程序可不可以改一下用来压缩文件流?

因为现在在某一个方法里面只是需要一个FileInputStream作为参数传入来,现在压缩与解压缩可用的,但我还未将文件经过下面两个程序压缩,只是将原文件的FileInputStream读出然后传给这个参数,读FileInputStream的方法如下:

    public FileInputStream getFileInputStream(String fileName){
        FileInputStream is = null;
        File file = new File(fileName);
        try{
            is = new FileInputStream(file);
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }

    //我想在这里用压缩程序得到压缩后的文件流,再传回去!
    
        //或者请提提建议怎样更方便实现!

        return is;
    }

以下是压缩与解压缩程序:
-----------------------------------------------------------
    public void doZipCompress(String inputFileName, String outputFileName){
        try{
            FileOutputStream fos = new FileOutputStream(outputFileName);
            CheckedOutputStream cos = new CheckedOutputStream(fos, new Adler32());
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(cos));
            File inputFile = new File(inputFileName);
            FileInputStream fis = new FileInputStream(inputFile);
            BufferedInputStream bis = new BufferedInputStream(fis, BUFFER);
            ZipEntry entry = new ZipEntry(inputFileName);
            out.putNextEntry(entry);
            int read;
            byte b[] = new byte[BUFFER];
            while((read = bis.read(b, 0, BUFFER)) != -1){
                out.write(b, 0, read);
            }
            bis.close();
            out.close();
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    public void doZipDecompress(String inputFileName, String outputFileName){
        try{
            FileInputStream fis = new FileInputStream(inputFileName);
            CheckedInputStream cis = new CheckedInputStream(fis, new Adler32());
            ZipInputStream zis = new ZipInputStream(new BufferedInputStream(cis));
            ZipEntry entry;
            while((entry = zis.getNextEntry()) != null){
                FileOutputStream fos = new FileOutputStream(outputFileName);
                BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER);
                int read;
                byte b[] = new byte[BUFFER];
                while((read = zis.read(b, 0, BUFFER)) != -1){
                    bos.write(b, 0, read);
                }
                bos.flush();
                bos.close();
            }
            zis.close();
        }catch(FileNotFoundException e){
            e.printStackTrace();
        }catch(IOException e){
            e.printStackTrace();
        }
    }


|
Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java类实现zip数据压缩方式的编程方法。  

  zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据。  

  与zip文件有关的几个Java类  

  ·类ZipEntry  

  public ZipEntry(String name);  

  name为指定的数据项名。  

  ·类ZipOutputStream  

  ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。下面是它的几个函数:  

  public ZipOutputStream(OutputStream out);  

  ∥利用输出流out构造一个ZIP输出流。  

  public void setMethod(int method);  

  ∥设置entry压缩方法,缺省值为DEFLATED。  

  public void putNextEntry(ZipEntry newe);  

  ∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。  

  ·类ZipInputStream  

  ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。下面是它的几个函数:  

  public ZipInputStream(InputStream in);  

  ∥利用输入流in构造一个ZIP输出流。  

  public ZipEntry getNextEntry();  

  ∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。  

  public void closeEntry();  

  ∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。  

  程序代码及其注释  

  下列的程序实现了数据文件zip方式的压缩和解压缩方法。randomData()函数随机生成50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP压缩文件;saveFile()函数将随机生成的数据存到ZIP格式的压缩文件中。  

  import java.util.zip.*;  

  import java.awt.event.*;  

  import java.awt.*;  

  import java.lang.Math;  

  import java.io.*;  

  public class TestZip extends Frame implements ActionListener {  

  TextArea textarea; ∥显示数据文件的多行文本显示域  

  TextField infotip; ∥显示数据文件未压缩大小及压缩大小单行文本显示域  

  String doc; ∥存储随机生成的数据  

  long doczipsize = 0;∥压缩数据文件的大小  

  public TestZip(){  

  ∥生成菜单  

  MenuBar menubar = new MenuBar();  

  setMenuBar(menubar);  

  Menu file = new Menu("File",true);  

  menubar.add(file);  

  MenuItem neww= new MenuItem("New");  

  neww.addActionListener(this);  

  file.add(neww);  

  MenuItem open=new MenuItem("Open");  

  open.addActionListener(this);  

  file.add(open);  

  MenuItem save=new MenuItem("Save");  

  save.addActionListener(this);  

  file.add(save);  

  MenuItem exit=new MenuItem("Exit");  

  exit.addActionListener(this);  

  file.add(exit);  

  ∥随机生成的数据文件的多行文本显示域  

  add("Center",textarea = new TextArea());  

  ∥提示文本原始大小、压缩大小的单行文本显示域  

  add("South",infotip = new TextField());  

  }  

  public static void main(String args[]){  

  TestZip ok=new TestZip();  

  ok.setTitle("zip sample");  

  ok.setSize(600,300);  

  ok.show();  

  }  

  private void randomData(){  

  ∥随机生成50个double数据,并放在doc字符串变量中。  

  doc="";  

  for(int i=1;i

    
 
 

您可能感兴趣的文章:

  • 急,请问数据流是经过zip压缩的,Linux下如何编程,解开压缩的数据流?
  • 请问一个简单问题我有一个tar文件需要gunzip压缩,我用gzip -c 先压缩,然后再用gunzip -c可就是不行。请高人指教
  • 请问是用什么压缩工具解压缩*.bz2的软件,高分相赠!
  • 操作系统 iis7站长之家
  • 请问如何改变内核的压缩方法?
  • 请问如何在WINDOWS下解压UNIX主机compress压缩后的.Z文件?有命令行工具吗?
  • 请问有没有LZSS加解压缩JAVA算法
  • "12345"压缩成四个字节为0x00,0x01,0x23,0x45(BCD码),请问程序如何写!
  • 请问,如何把多个文件夹压缩一个包(70分)
  • 请问在UNIX系统下后缀名是.z的压缩文件,到WINDOWS系统的COMMAND窗口下有什么工具或命令可以解开吗?
  • 下载As86的一个压缩包,解开后没有rpm看样子的自己编译,请问如何编译。
  • 请问:如何将一文件压缩后通过管道送至FTP Server?
  • red hat linux 9,想装个汉字终端,下了个文件zhcon-0.2.3.tar.gz,请问该用什么命令来安装这个压缩包?谢谢
  • 听说java自带一个压缩的类,请问有知道这方面的没有?
  • weblogic可不可以当作jndi服务器使用?如果可以,请问如何管理?
  • 请问:javabean里可不可以用JSP里的变量,可不可以用JSP里的组件。
  • 请问在servlet中用out.println输出的html可不可以用javascript写方法,如果可以,怎么用
  • 请问java可不可以这样:
  • 请问直接把linux光盘里面的内容放到硬盘上面可不可以安装?如果可以的话要用哪一个执行文件安装?
  • 请问下,在嵌入式linux驱动里面可不可以用信号量?
  • 请问:环境变量的名字随便写一个可不可以呀。
  • 请问UNIX 可不可以安装在普通台式机中
  • 请问qt启用两个QThread线程可不可以运行不同的程序
  • 请问可不可以装2个版本的linux?
  • 请问pthread_mutex_lock()和pthread_mutex_unlock()可不可以用于对不同进程的线程进行同步。
  • 请问各位大哥,linux下的普通用户可不可以在别人的机器上安装程序,
  • 请问,在JAVA中可不可以将字符串付值给一个变量呢?
  • 请问可不可以不参加培训直接去考试
  • 大家备份windows98用ghost 估计就用得很多了, 请问linux可不可以ghost 备份? 还有linux 的资源管理器在哪里? 我想打开我原来的硬盘F
  • 请问:如果数据库表中的age字段的类型为number(1), 哪 么我定义的宿 主变量用int age 可不可以啊,(当我往里面插入时,有错误啊)
  • 请问,linux和unix到底有什么区别,可不可以通过安装学习linux来掌握unix的命令等知识?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请问wxWindows 和Qt随用来移植MFC开发的程序比较好?
  • 请问TreeCellRenderer接口主要用来干什么啊?
  • 请问最好用的,用来调试JSP页面的工具是什么?能否介绍一下呀?
  • 请问IRIX系统里面用来做网络服务的文件是哪里啊?
  • 请问RH Linux下的/opt目录是用来放什么东西的?
  • 请问linux下有没有类似于windows perfmon用来监测系统性能的东西?
  • APUE初学者:请问dup,dup2函数可以用来干什么?有什么好处?
  • 请问:netstat这个命令能用来干什么啊?
  • 请问在上传文件的jsp页的form里面,除了有一个<input type="file">外,我还有一个附加的文本框用来传其他的信息,为什么我在servlet里面
  • 我下载j2sdk1.4的时候发现还有另一下包j2re1.4,请问j2re是干什么用的,它是用来支持什么东西的?
  • 做redhat linux7.3启动软盘:我的LINUX系统是在hda7上的,但我在这做的启动软盘是要用来启动接在hdc1上的另一个LINUX系统的,请问该怎么办啊
  • 各位请问哪里有免费可靠的支持JSP的空间,想找一个用来学习。(NULL)
  • 请问:我知道路由器的telnet密码,但忘记了enable 密码,请问如何是好?
  • 请问那里有SYBASE的jbdb 2.0下载;jspsmartupload可以直接将文件上传到数据库,请问如何使用
  • 请问最新的reahat9.0是基于什么核心的?2.4?2.6?请问那里能下载?
  • 请问:请问哪里有关于linux基本操作命令讲解的资料下载,最好是幻灯片格式的.
  • 请问,我试图用#admintool&图形工具命令来安装sun workshop5.0,为什么进入的却是用户管理界面?请问具体该如何在solaris下安装应用软件
  • 请问在Redhat 9里,我从登录就是图形介面,请问如何在图形介面内进入命令行方式呢,谢谢
  • 请问玩过SOLARIS的高手门,在不正常关机后,就不能启动到windows公用桌面了,只能在命令提示模式下了,请问怎么解决这个问题啊?急~!~!
  • 请问:我在redhat下装了bochs-2.2.1-1.rpm,.装了后,想设置一下,但找不到bochsrc.fda.bxrc,请问这个文件在哪个曰录下啊。
  • 请问:在配置Qt时,很多文档都说在.profile,.login里加东西,但是我好像没有发现有这两个文件上,请问这些文件在哪个目录下啊
  • 请问:在GCC里的C程序里的变量的声明是不是只能在前面,而且相同类型的变量的声明只能放在一起?如果不是,请问怎么样可以解决这个问题.
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 主机是WIN2000,我用的是LUNIX,请问是否可以共享上网? 如果可以请问如何设置? 500分答谢,龟儿食言!
  • 请问linux下GUI开发的问题!
  • 请问出现fstab文件丢失该怎么修复呀?
  • 请问这个方法如何调用?
  • 请问一个奇怪的问题!
  • 请问在网页中打开的新窗口,如何让其居中。
  • 请问我该学什么了
  • 请问安装zhcon,cxterm问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3