当Files.walk(rootPath).sorted(Comparator.reverseOrder())。forEach(new Consumer <path>());时,java.nio.file.DirectoryNotEmptyException;

时间:2018-02-08 08:29:58

标签: java nio filesystemwatcher

我正在java中编写一个涉及文件系统中文件的小应用程序,并使用java.nio的包。解决递归删除文件树的问题:我的代码如下:

                Files.walk(rootPath).sorted(Comparator.reverseOrder()).forEach(new Consumer<Path>() 
            {
                @Override
                public void accept(Path path)
                {
                    try
                    {
                        if (Files.isDirectory(path))
                        {
                            unregister(path);
                        }
                        Files.delete(path);
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }

                }
            });

文件树如下所示:

Level 1 folder
  Level 2 folder
    Level 3 folder
      Level 4 file
      Level 4 file
      Level 4 ... files

代码删除最后一个文件夹中的所有文件,然后删除最后一个文件夹。此文件夹不会消失,但会一直保留到程序结束。因此,应用必须锁定此文件。

每个目录都是为来自文件系统的事件注册的(使用path.register(watcher)。在删除之前,我从文件夹中删除了这个注册。但是锁似乎不会被删除。

您对此问题有任何解决方案建议吗?

提前谢谢。

基督教

0 个答案:

没有答案