我现在把D:\tep\a.zip中的a.zip文件展开到E:\aa\ 目录下面.程序是这样写的:
ZipUtility zipUtility = new ZipUtility();
zipUtility.extract(tempFile, popupFile);
if (tempFile.exists()) {
                    tempFile.delete();
}执行这段程序后,我把tempFile这个文件删掉(也就是把a.zip文件删除),但是删除不掉tempFile(a.zip)文件,为什么???谢谢.其中ZipUtility 类中有这个方法:extract;
代码如下:
public class ZipUtility {
private String lcd = null;
/**
 * 
 * @param File  要展开的ZIP file
 * @param File 展开到哪个目录 文件
 */
public void extract(final File in, final File out) throws EAPLIException {
ZipFile zipFile = null;
try{
zipFile = new ZipFile(in);
}catch(IOException e){
                  } Enumeration enumeration = zipFile.entries();
while(enumeration.hasMoreElements()){
     ZipEntry target = (ZipEntry)enumeration.nextElement();
     File file = new File(out, target.getName()); // 目录文件是否存在,否则创建
                        if(target.isDirectory()){
if(!file.exists() || file.isFile()){
file.mkdirs();
}
continue;
      }
      String parentName = file.getParent();
      if(parentName != null){
         File directory = new File(parentName);
if(!directory.exists() || directory.isFile()){
directory.mkdirs();
}
      }
// 进行展开
try{
BufferedInputStream inputStream = new BufferedInputStream(zipFile.getInputStream(target));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
int buffer;
while((buffer = inputStream.read()) != -1){
  outputStream.write((byte)buffer);
}
outputStream.close();
inputStream.close();
}catch(IOException e){ }
}
}
}

解决方案 »

  1.   

    文件该close 都close 掉了为何还删除不掉这个文件为为什么呢?郁闷啊
      

  2.   


    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;public class ZipUtility {
    private String lcd = null;
    /**
     * 
     * @param File  要展开的ZIP file
     * @param File 展开到哪个目录 文件
     */
    public void extract(final File in, final File out){
    ZipFile zipFile = null;
    try{
    zipFile = new ZipFile(in);
    }catch(IOException e){
            } Enumeration enumeration = zipFile.entries();
    while(enumeration.hasMoreElements()){
         ZipEntry target = (ZipEntry)enumeration.nextElement();
         File file = new File(out, target.getName()); // 目录文件是否存在,否则创建
                            if(target.isDirectory()){
    if(!file.exists() || file.isFile()){
    file.mkdirs();
    }
    continue;
          }
          String parentName = file.getParent();
          if(parentName != null){
             File directory = new File(parentName);
    if(!directory.exists() || directory.isFile()){
    directory.mkdirs();
    }
          }
    // 进行展开
    try{
    BufferedInputStream inputStream = new BufferedInputStream(zipFile.getInputStream(target));
    BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
    int buffer;
    while((buffer = inputStream.read()) != -1){
      outputStream.write((byte)buffer);
    }

    outputStream.close();
    inputStream.close();
    }catch(IOException e){ }
    }
    try {
    zipFile.close();            //********这样就OK了!!!!!!!
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  3.   

    加入:
    try {
    zipFile.close();            //********这样就OK了!!!!!!!
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  4.   

    rower203(华仔) :谢谢您.按照你这个方式是删掉了.
    但是我现在有个疑问,我这个ZipUtility是个共同的类,在我的项目中别处调用这个方法解压后,可以删除的(注:别处在调用这个方法时,下面还有别的文件操作:对解压后的文件进行读写操作).但我这个功能.调用这个方法后,就没有操作了.我比较这几个调用的地方都没有做zipFile.close()操作,为何呢?
    谢谢您.
      

  5.   

    唉,楼主的好删除啊,我现在要找能不动大压缩文件的情况下,操作里面的zipentry,删除里面的文件。郁闷了,一直没找到合适的资料
      

  6.   

    cql0007(南方过客) :你可以说的详细些吗?我看能不能有这方面的资料.
    我上面完成的功能是从数据库拿出BLOB的数据转换到本地ZIP文件中,然后再把这个ZIP文件解压到别的地方.然后ZIP文件删掉.
      

  7.   

    http://community.csdn.net/Expert/topic/4273/4273249.xml?temp=.2820398楼主,我的删除ZIP内文件的贴子在这里了