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

java中的删除目录不是删除目录,java,zip,Java,Zip,我删除目录后压缩相同。我使用下面的代码来制作zip和delete 我可以做压缩,不能删除文件夹 谁能告诉我我哪里做错了 这里是我使用的代码 public class ZipDirectory { public static void main(String[] a) throws Exception { zipFolder("d:\\conf2", "d:\\conf2.zip"); } static p

我删除目录后压缩相同。我使用下面的代码来制作zip和delete

我可以做压缩,不能删除文件夹

谁能告诉我我哪里做错了

这里是我使用的代码

    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();
          }   

        }
公共类ZipDirectory{
公共静态void main(字符串[]a)引发异常{
zipFolder(“d:\\conf2”,“d:\\conf2.zip”);
}
静态公共void zipFolder(String srcFolder,String destZipFile)引发异常{
ZipOutputStream zip=null;
FileOutputStream fileWriter=null;
fileWriter=新的FileOutputStream(destZipFile);
zip=新的ZipoutStream(fileWriter);
addFolderToZip(“”,srcFolder,zip);
zip.flush();
zip.close();
删除(新文件(srcFolder));
}
静态私有void addFileToZip(字符串路径、字符串srcFile、ZipOutputStream zip)
抛出异常{
文件夹=新文件(srcFile);
if(folder.isDirectory()){
addFolderToZip(路径,srcFile,zip);
}否则{
字节[]buf=新字节[1024];
内伦;
FileInputStream in=新的FileInputStream(srcFile);
putNextEntry(新的ZipEntry(path+“/”+folder.getName());
而((len=in.read(buf))>0){
zip.write(buf,0,len);
}
}
}
静态私有void addFolderToZip(字符串路径、字符串srcFolder、ZipoutStream zip)
抛出异常{
文件夹=新文件(srcFolder);
对于(字符串文件名:folder.list()){
addFileToZip(路径+“/”+文件夹.getName(),srcFolder+“/”+文件名,zip);
}
}
静态私有void delete(文件路径){
if(path.exists()){
File[]files=path.listFiles();

对于(int i=0;i请关闭
FileInputStream
的实例以成功删除


请在.close()中添加
添加文件到zip()
方法中。

请关闭
文件输入流的实例以使删除成功


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

您没有冷却您创建的ZipoutStream对象。请尝试在代码中替换以下方法。在这里,我已在Try with resource中创建了ZipoutStream对象,并且成功了

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));
    }
}

您没有冷却已创建的ZipoutpStream对象。请尝试在代码中替换以下方法。在这里,我已在Try with resource中创建了ZipoutpStream对象,并且成功了

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));
    }
}

在跟踪delete方法时,它显示如下

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

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

07:58:12.734019462 0x2970500 mt.9出口 07:58:12.734019815 0x2970500 mt.0 Entry>java/io/File.isInvalid()Z字节码方法,此方法=0xfffc4810

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


在跟踪delete方法时,它显示如下

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

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

07:58:12.734019462 0x2970500 mt.9出口 07:58:12.734019815 0x2970500 mt.0 Entry>java/io/File.isInvalid()Z字节码方法,此方法=0xfffc4810

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



此文件夹中是否有目录?是否收到任何错误消息或异常?请检查
文件[i].delete()的返回值
。如果不成功,则为
false
。可能该目录包含@SachinGupta已指出的子目录。有关如何删除整个文件树的信息,请参阅Java API文档中的
FileVisitor
的第一个示例:如果目录不为空,则无法删除该目录,这可能是删除()的原因之一API失败。此文件夹中是否有目录?是否收到任何错误消息或异常?请检查
文件[i]的返回值。删除()
。如果不成功,则为
false
。可能该目录包含@SachinGupta已指出的子目录。有关如何删除整个文件树的信息,请参阅Java API文档中的
FileVisitor
的第一个示例:如果目录不为空,则无法删除该目录,这可能是删除()的原因之一API失败。我在此文件夹下没有子目录。@Mary.Hansen我已经编辑了我的答案,请关闭
FileInputStream
的实例。我想在那之后它会工作的。我在此文件夹下没有子目录。@Mary.Hansen我已经编辑了我的答案,请关闭
FileInputStream
的实例。我想在那之后它将我工作。但是,它没有删除文件夹。我复制了这个方法。有什么想法吗?在你的addFileToZip方法中,关闭FileInputStream对象,你的问题就会得到解决。“In.close();”不过,它并没有删除文件夹。我复制了该方法。有什么想法吗?在您的addFileToZip方法中,关闭FileInputStream对象,您的问题就会得到解决。“In.close();