首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

80分散分!解决了就给分,其实是小疑点

2012-01-12 
80分散分!!解决了就给分,其实是小问题importjava.util.zip.*importjava.io.*publicclassZipper{privateS

80分散分!!解决了就给分,其实是小问题
import   java.util.zip.*;
import   java.io.*;  

  public   class   Zipper
  {
  private   String   Name;
  private   ZipOutputStream   zip;
  public   String   getName()
  {
  return   Name;
  }
  public   void   setName(String   newName)
  {
  Name=newName;
  }
        //构造一个ZipOutputStream输出流利用输出流zip
 
 
  //添加方法完成的初始化
  public   int   init()
  {
  //建立并且初始化一个输入流
  try
  {
  //ZIP输出流的建立
 
  zip=new   ZipOutputStream(new   FileOutputStream(Name));  
  //Sets   the   ZIP   file   comment.  
  zip.setComment( "Zip   file   created   by   java ");
  //设置entry压缩方法,缺省值为DEFLATED  
  zip.setMethod(ZipOutputStream.DEFLATED);
                          //设置entry压缩水平,缺省值为DEFAULT_COMPRESSION  
                        zip.setLevel(compressionLevel);
  }
  catch(Exception   e)
  {
  System.out.println(e);
 
  }
  return   0;
  }
  public   int   close()
  //关闭输入流,清空缓冲区
  {
  try
  {
  zip.close();
  }
  catch(Exception   e)
  {
  System.out.println(e);
  return   1;
  }
  return   0;
  }
  public   int   addFile(String   fileName)
  {
  //编写增加压缩文件的函数
  int   entryNum;
  try
  {
  File   file   =new   File   (fileName);
  FileInputStream   in   =new   FileInputStream(file);
  byte[]   bytes=new   byte[in.available()];
  //in.available()方法返回的是输入流中可以正擦读取的字节数值,
  //     可以是读取的字节的数目,可以避免阻塞的问题,因为我们
  //     只是从流中读取能够读取的字节的序列
  in.read(bytes);
  in.close();
  //建立并且初始化zipEntry
  //getName()返回条目的名称
  ZipEntry   entry   =new   ZipEntry(file.getName());
  //设置条目修改的时间
          entry.setTime(file.lastModified());
          //向zip文件中写入数据
          zip.putNextEntry(entry);
          //如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry  
                                                //并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。
  zip.write(bytes);
  zip.closeEntry();
  //关闭当前的zip   entry,并将数据流定位于下一个entry的起始位置。  
 
  }
  catch(Exception   e)
  {
  System.out.println(e);
  }
  entryNum++;
  return   0;
  }


public   static   void   main(String[]   args)
  {
          int   compressionLevel=Deflater.DEFAULT_COMPRESSION;
          int   argc=args.length;
          //argc是程序运行参数的长度


          int   argn;
          //argn用于解释命令行参数
          //解释命令行参数
          for(argn=0;(argn <args.length)&&args[argn].charAt(0)== '- ';++argn)
          //(argn <args.length)&&args[argn].charAt(0)== '- ';
          //表示没有循环完所有的参数的数量并且参数的是以 "- "为开始的
          //备注:Zipper是通过Zipper       -?来使用参数的       -?是参数。args[]就是传进来的参数。
          {
          if   (args[argn].equals( "-1 "))
          //如果参数为-1
          {
          ++argn;
          compressionLevel=Integer.parseInt(args[argn]);
          }
          else
          {
          System.out.println( "usage: "
          + "   Ziper[-1   Level]   zipfile   files ");
          return;
         
          }
          }
          if   (argc-argn <1)
          //已经检查参数了
          {
          System.out.println( "usage:Zipper   [-1   Level]   zipfile   files ");
          return;
          }
          else   try
          {
          //余下的第一个参数是生成zip文件的名称
          Zipper   zip   =new   Zipper(args[argn++]);
          zip.compressionLevel=compressionLevel;
          zip.init();
          //其余的参数是需要压缩的文件名称
          for   (;argn <args.length;++argn)
          {
          //将一个文件读入内存
          zip.addFile(args[argn]);
          zip.close();
          }
          }
          catch(Exception   e)
          {
          e.printStackTrace();  
          }
          }
}
 


你觉得错在哪?
 



[解决办法]
你是需要将文件添加到压缩包中吗?
用法
java testZipFile file target
代码如下:
import java.util.zip.*;
import java.io.*;

public class testZipFile {
public static void main(String[] args) {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(args[0]), "ISO8859_1 "));
FileOutputStream fos = new FileOutputStream(args[1] + ".zip ");
CheckedOutputStream cos = new CheckedOutputStream(fos, new CRC32());
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(cos));


int c;
zos.putNextEntry(new ZipEntry(args[0]));
while ((c = in.read()) != -1)
zos.write(c);
in.close();
zos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

热点排行