组件移动文件导致 java.io.IOException,并试图移动到错误的文件夹

问题描述

我的流程中有一个 Move file 组件:

<sub-flow name="MoveFileToErrorDirectorySubFlow" doc:id="51f387ca-5faa-4ba4-af87-008a1698e104" >
    <file:move doc:name="MoveFileToErrorDir" doc:id="c99d732d-2fc5-4512-b50d-c97c9b4e8aff" sourcePath="${invoices.import.path}" targetPath="${invoices.error.path}" config-ref="XMLFile"/>
</sub-flow>

invoices.import.path 指向 /home/user/invoices/import/invoice

invoices.error.path 应该指向/home/user/invoices/import/invoice/error

但是当我尝试通过将文件粘贴到 /home/user/invoices/import/invoice/

来运行流程时

我收到一个错误:

消息:对文件“/home/user/invoices/import/invoice”执行“移动”操作到“/home/user/invoices/import/invoice/error/invoice”时发生错误:无法移动目录: /home/user/invoices/import/invoice 到自身的子目录:/home/user/invoices/import/invoice/error/invoice

首先,为什么我会收到错误:

java.io.IOException:无法移动目录:/home/user/invoices/import/invoice 到其自身的子目录:/home/user/invoices/import/invoice/error/invoice

第二件事,为什么目标目录是 /home/user/invoices/import/invoice/error/invoice 而不是 /home/user/invoices/import/invoice/error

第三件事,我正在尝试移动一个文件,但它似乎正在尝试移动整个目录 - 如上所述的错误路径...

我在这里做错了什么?

解决方法

您似乎正在尝试移动目录 (/home/user/invoices/import/invoice) 而不是该目录中的文件(以 /home/user/invoices/import/invoice/report.csv 为例)。连接器期望 sourcePath path 是文件的路径,包括文件名。顺便说一下,扩展名是名称的一部分,所以不要错过它。

另一方面,targetPath 应该是一个目录。

这就解释了所有问题。

  1. 您的 sourcePath 指向一个目录。您不能将目录移动到其自己的子目录之一。这在我所知道的任何文件系统中都没有意义。
  2. 因为它试图将 /home/user/invoices/import/invoice 移动到 /home/user/invoices/import/invoice/error,所以结果目标将是创建 invoice 子目录的 error 子目录,或 {{1} }.

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...