【问题标题】:No signature of method: build_hash$_copyRecursively_closure3.doCall() is applicable for argument types没有方法签名: build_hash$_copyRecursively_closure3.doCall() 适用于参数类型
【发布时间】:2015-12-02 22:16:37
【问题描述】:

我真的被这个错误困住了。这对我来说没有任何意义。为什么使用参数类型 UnixPath, null ?我尝试打印 tempDir 变量,它与预期的一样 - e.i.具有正确路径的路径对象。

有什么想法吗?

没有方法签名:build_76p6jmah0vklon2l29au5dqlcr$_copyRecursively_closure3.doCall() 适用于参数类型:(sun.nio.fs.UnixPath, null) 值:[generic/bundle, ...] 可能的解决方案:doCall()、doCall(java.lang.Object)、findAll()、findAll()

readFile(args[Property.CONFIG_FILE.propertyName]).eachLine {
        if (new File(it).isDirectory()) {
            copyRecursively(Paths.get(it), tempDir)
        } else {
            println "File $it is not a directory. Skipping."
        }
    }


void copyRecursively(Path sourceDir, Path destinationDir) {
    Files.walkFileTree(sourceDir, [FileVisitOption.FOLLOW_LINKS] as Set, Integer.MAX_VALUE, [
            postVisitDirectory: { return FileVisitResult.CONTINUE },
            preVisitDirectory: {filePath, attrs ->
                Path newDirectory = destinationDir.resolve(sourceDir.relativize(filePath));
                Files.copy(filePath, newDirectory, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE;
            },
            visitFile: { filePath, attrs ->
                Files.copy(filePath, destinationDir.resolve(sourceDir.relativize(filePath)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING);
                return FileVisitResult.CONTINUE;
            },
            visitFileFailed: { return FileVisitResult.CONTINUE }
    ] as java.nio.file.FileVisitor)
}

【问题讨论】:

  • copyRecursively 方法是否定义在同一个作用域/脚本中?
  • 是的。我也有其他方法,就像这个一样,它们也有效

标签: java groovy


【解决方案1】:

您面临的问题是因为 FileVisitor 对象没有正确构造 bean。方法 visitFileFailedpostVisitDirectory 需要两个参数,但您没有提供任何参数。解决问题后,copyRecursively 的正确方法定义为:

void copyRecursively(Path sourceDir, Path destinationDir) {
    FileVisitor visitor =[
            preVisitDirectory : { Path filePath, BasicFileAttributes attrs ->
                Path newDirectory = destinationDir.resolve(sourceDir.relativize(filePath))
                Files.copy(filePath, newDirectory, StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE
            },
            visitFile         : { Path filePath, BasicFileAttributes attrs ->
                Files.copy(filePath, destinationDir.resolve(sourceDir.relativize(filePath)), StandardCopyOption.COPY_ATTRIBUTES, StandardCopyOption.REPLACE_EXISTING)
                return FileVisitResult.CONTINUE
            },
            visitFileFailed   : { file, IOException ex -> return FileVisitResult.CONTINUE },
            postVisitDirectory: { dir, IOException ex -> return FileVisitResult.CONTINUE }
    ] as FileVisitor
    Files.walkFileTree(sourceDir, [FileVisitOption.FOLLOW_LINKS] as Set, Integer.MAX_VALUE, visitor)
}

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2020-02-15
    • 2022-01-14
    • 2015-09-28
    相关资源
    最近更新 更多