以递归方式删除目录java无法正常工作

时间:2016-09-01 08:09:42

标签: java

如何用Java中的内容删除整个目录? 我尝试了一些代码,但它不起作用。

  public static void removeRecursive(Path path) throws IOException
{
    Files.walkFileTree(path, new SimpleFileVisitor<Path>()
    {
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                throws IOException
        {
            Files.delete(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException
        {
            // try to delete the file anyway, even if its attributes
            // could not be read, since delete-only access is
            // theoretically possible
            Files.delete(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException
        {
            if (exc == null)
            {
                Files.delete(dir);
                return FileVisitResult.CONTINUE;
            }
            else
            {
                // directory iteration failed; propagate exception
                throw exc;
            }
        }
    });
}

它抛出错误:

D:\ MainDir \ chantier:Erreur de lecture。 字符串索引超出范围:-1

这是我的道路 d:\ MAINDIR \ CH \地块\卷宗\ mail.zip

我想用他的内容删除目录ch \ Lot \ dossier \ mail.zip 但我的功能只删除\ dossier \ mail.zip并抛出提到的错误

Ps:我作为输入文件给出D:\ MainDir \ ch

提前致谢

1 个答案:

答案 0 :(得分:1)

在目录中,您需要为每个文件执行此操作。您可以检查.isDirectory(),如果是,则从.listFiles()循环遍历每个文件,直到您完成传递给方法的根目录内的所有内容。

Java 8现在也提供了Files.walk来更轻松地完成这项工作,请查看文档here