Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 继续之前,请确保文件夹树已完成_Java_Tree_Watchservice - Fatal编程技术网

Java 继续之前,请确保文件夹树已完成

Java 继续之前,请确保文件夹树已完成,java,tree,watchservice,Java,Tree,Watchservice,我正在编写一个hotfolder类型的程序,其中拖入指定上载文件夹的文件+文件夹将上载到云服务 快速概述我希望如何执行此操作: WatchService通知我有东西被拖到文件夹中。 在拖动的文件夹中遍历Files.walkFileTree,在云服务中创建文件夹以模拟拖动的文件夹结构 将我遇到的文件上载到各自的文件夹。 我的问题是,我很难找到最可靠的方法来确保我的嵌套目录树已完全复制到我的监视文件夹。walkFileTree方法在调用时立即对目录树进行快照,因此无法检测调用后创建的文件夹。这会导致

我正在编写一个hotfolder类型的程序,其中拖入指定上载文件夹的文件+文件夹将上载到云服务

快速概述我希望如何执行此操作:

WatchService通知我有东西被拖到文件夹中。 在拖动的文件夹中遍历Files.walkFileTree,在云服务中创建文件夹以模拟拖动的文件夹结构 将我遇到的文件上载到各自的文件夹。 我的问题是,我很难找到最可靠的方法来确保我的嵌套目录树已完全复制到我的监视文件夹。walkFileTree方法在调用时立即对目录树进行快照,因此无法检测调用后创建的文件夹。这会导致一个问题,因为我用来检测更改的函数在调用后不会看到发生的更改

为了解决这个问题,我在散步前添加了一个线程.sleep3000,但这是非常随意的,有时会失败。有没有驯服这只野兽的办法


是否有一个实时文件树遍历器在调用时不设置树结构?我注定要写一个自定义函数吗?开玩笑,听起来很有趣。

找到了解决办法。创建一个简单的检查器,以确保文件树已完全更新。apachecommons的FileUtils有一个sizeOfDirectory方法,可以返回嵌套目录树的大小

// makes sure system has folder tree completely updated
private void waitFoldersComplete(Path child) throws InterruptedException {
    long folderSize;
    do {
        folderSize = FileUtils.sizeOfDirectory(child.toFile());
        System.out.println(folderSize);
        Thread.sleep(30);
    } while(folderSize < FileUtils.sizeOfDirectory(child.toFile()));
}
希望这能在这种情况下帮助他人