当前位置:编程学习 > JSP >>

Java的文件操作--2(Zip文件释放)

答案:  在java中专门有一个对zip文件操作的包(java.util.zip),对zip文件操作挺方便的,上次说写一个zip文件释放程序,花了一天时间终于写完了,起先想起来挺简单的:原理就是将zip文件中的文件夹和文件通过ZipInputStream和ZipEntry类一一得出,然后分别再对应目录下创建文件和文件夹。可是实现起来就不是那么回事了,其中有好多细节问题都不好解决,其中在调用ZipInputStream中的getNextEntry方法时如果zip文件中包含中文路径名或者文件名就会抛出异常,所以这段程序难免会有许多错误和bug,甚至还有些思路上的问题,希望大家能多提意见。
     其实java中对文件的操作就是对输入输出流的运用和控制,这样讲有些范,但是如果你理解了流的运用就会觉得对文件操作原来就是这样呀!但是你千万不要以为java的输入输出就这么简单,会用和用的好是两码事,就象同样形容思想坚决,果断和武断就是两个截然不同的描述,因此要想用好java的出入输出还需要多多练习,多多思考。好了,说了那么多都是些废话,下面是程序源码,希望对大家有用!

                                                                                                                                                                    pcera  
                                                                                                                                                                    2005-7-2   17:44
                                                  
/**
 *类名:zipFileRelease
 *说明:对zip文件解压,释放在指定,目录下
 *介绍:主要的zip文件释放方法releaseHandle()
 *  用ZipInputStream类和ZipEntry类将zip文件的入口清单列举出来,然后
 *  根据用户提供的输出路径和zip文件的入口进行组合通过DataOutputStream
 *  和File类进行文件的创建和目录的创建,创建文件时的文件数据是通过
 *  ZipInputStream类、ZipEntry类、InputStream类之间的套嵌组合获得的。
 *注意:如果zip文件中包含中文路径程序将会抛出异常
 *日期:2005-7-1
 *作者:Pcera
 */

import java.io.*;
import java.util.*;
import java.util.zip.*;

class zipFileRelease{
 
 private String inFilePath;
 private String releaseFilePath; 
 private String[] FileNameArray;      //存放文件名称的数组  
 private ZipEntry entry;
 //
 private FileInputStream fileDataIn;
 private FileOutputStream fileDataOut;
 private ZipInputStream zipInFile;          
 private DataOutputStream writeData;
 private DataInputStream readData;
 //
 private int zipFileCount = 0;        //zip文件中的文件总数
 private int zipPathCount = 0;        //zip文件中的路径总数
 
 /**
  *初始化函数
  *初始化zip文件流、输出文件流以及其他变量的初始化
  */
 public zipFileRelease(String inpath,String releasepath){
  inFilePath = inpath;
  releaseFilePath = releasepath;
 }
 
 /**
  *初始化读取文件流函数
  *参数:FileInputStream类
  *返回值:初始化成功返回0,否则返回-1
  */
 protected long initInStream(ZipInputStream zipFileA){
  try{
   readData = new DataInputStream(zipFileA);
   return 0;
  }catch(Exception e){
   e.printStackTrace();
   return -1;
  }
 } 
 
 /**
  *测试文件路径
  *参数:zip文件的路径和要释放的位置
  *返回值:是两位整数,两位数中的十位代表输入路径和输出路径(1输入、2输出)
  *  各位数是代表绝对路径还是相对路径(1绝对、0相对)
  *  返回-1表示路径无效
 
 protected long checkPath(String inPath,String outPath){
  File infile = new File(inPath);
  File infile = new File(outPath);
  
 }
 */ 
 
 /**
  *初始化输出文件流
  *参数:File类
  *返回值:初始化成功返回0,否则返回-1
  */
 protected long initOutStream(String outFileA){
  try{
   fileDataOut = new FileOutputStream(outFileA);
   writeData = new DataOutputStream(fileDataOut);
   return 0; 
  }catch(IOException e){
   e.printStackTrace();
   return -1;
  }
 }
 
 /**
  *测试文件是否存在方法
  *参数:File类
  *返回值:如果文件存在返回文件大小,否则返回-1
  */
 public long checkFile(File inFileA){
  if (inFileA.exists()){
   return 0;
  }else{
   return -1;
  }
 }
 
 /**
  *判断文件是否可以读取方法
  *参数:File类
  *返回值:如果可以读取返回0,否则返回-1
  */
 public long checkOpen(File inFileA){
  if(inFileA.canRead()){
   return inFileA.length();
  }else{
   return -1;
  }
 }
  
 /**
  *获得zip文件中的文件夹和文件总数
  *参数:File类
  *返回值:如果正常获得则返回总数,否则返回-1
  */
 public long getFilFoldCount(String infileA){
  try{
   int fileCount = 0;
   zipInFile = new ZipInputStream(
      new FileInputStream(infileA));
   while ((entry = zipInFile.getNextEntry()) != null){
    if (entry.isDirectory()){
     zipPathCount++;
    }else{
     zipFileCount++;
    }
    fileCount++;
   }    
   return fileCount;
  }catch(IOException e){
&nb

上一个:java io读取文件到String
下一个:一个FIFO pipe的简单Java实现

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,