删除java中的目录不是删除目录

时间:2015-04-27 07:00:30

标签: java zip

我在拉链后删除了diretory。我使用以下代码进行zip和删除。

我可以做zip并且无法删除该文件夹。

任何人都可以指出我在哪里做错了。

这里是我使用的代码

    public class ZipDirectory {

        public static void main(String[] a) throws Exception {
            zipFolder("d:\\conf2", "d:\\conf2.zip");
          }

          static public void zipFolder(String srcFolder, String destZipFile) throws Exception {
            ZipOutputStream zip = null;
            FileOutputStream fileWriter = null;
            fileWriter = new FileOutputStream(destZipFile);
            zip = new ZipOutputStream(fileWriter);

            addFolderToZip("", srcFolder, zip);
            zip.flush();
            zip.close();

            delete(new File(srcFolder));
          }

          static private void addFileToZip(String path, String srcFile, ZipOutputStream zip)
              throws Exception {

            File folder = new File(srcFile);
            if (folder.isDirectory()) {
              addFolderToZip(path, srcFile, zip);
            } else {
              byte[] buf = new byte[1024];
              int len;
              FileInputStream in = new FileInputStream(srcFile);
              zip.putNextEntry(new ZipEntry(path + "/" + folder.getName()));
              while ((len = in.read(buf)) > 0) {
                zip.write(buf, 0, len);
              }
            }
          }

          static private void addFolderToZip(String path, String srcFolder, ZipOutputStream zip)
              throws Exception {
            File folder = new File(srcFolder);
            for (String fileName : folder.list()) {       
                addFileToZip(path + "/" + folder.getName(), srcFolder + "/" + fileName, zip);        
            }
          }

          static private void delete (File path){
            if( path.exists() ) {
                File[] files = path.listFiles();
                for(int i=0; i<files.length; i++) {
                     files[i].delete();                
                }
              }
            path.delete();
          }   

        }

3 个答案:

答案 0 :(得分:4)

请关闭FileInputStream的实例以使删除成功。

请在in.close()方法中添加addFileToZip()

答案 1 :(得分:1)

在跟踪删除方法时,它显示以下

07:58:12.734018754 0x2970500 mt.0 Entry&gt; java / io / File.delete()Z字节码方法,这= 0xfffc4810

07:58:12.734019108 0x2970500 mt.3 Entry&gt; java / lang / System.getSecurityManager()Ljava / lang / SecurityManager;字节码静态方法

07:58:12.734019462 0x2970500 mt.9退出

07:58:12.734019815 0x2970500 mt.0 Entry&gt; java / io / File.isInvalid()Z字节码方法,这= 0xfffc4810

  
    

在删除文件时,安全管理器拒绝删除该文件,因为已存在与之关联的文件描述符。关闭Fileinput流以避免这种情况。

  

答案 2 :(得分:0)

您没有整理已创建的ZipOutputStream对象。尝试在代码中替换以下方法。在这里,我在try-with-resource中创建了ZipOutputStrean对象,并且它可以工作

static public void zipFolder(String srcFolder, String destZipFile) throws Exception {
    try(ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(destZipFile)))
    {
        addFolderToZip("", srcFolder, zip);
        zip.flush();
        zip.close();

        delete(new File(srcFolder));
    }
}