Java 如何从预先确定的目录(按文件名)复制给定文件

Java 如何从预先确定的目录(按文件名)复制给定文件,java,spring,spring-integration,Java,Spring,Spring Integration,我在这里使用Spring集成 我有一个目录,另一个服务激活器正在将文件复制到该目录 文件需要留在那里,直到它们在数据库上的状态被处理——然后我需要将文件移动到下一个目录,在那里它们将通过SFTP发送到最终目的地 我有一个轮询通道,可以从数据库中获取处于已处理状态的文件列表。然后,我拆分传入列表,每条消息现在都包含需要移动到其有效负载中下一个目录的文件名 我如何告诉入站通道适配器仅读取给定文件?我拥有从定义目录到该文件的完整路径,并将其复制/移动到下一个目录 这是我目前的配置: <!-- F

我在这里使用Spring集成

我有一个目录,另一个服务激活器正在将文件复制到该目录

文件需要留在那里,直到它们在数据库上的状态被处理——然后我需要将文件移动到下一个目录,在那里它们将通过SFTP发送到最终目的地

我有一个轮询通道,可以从数据库中获取处于已处理状态的文件列表。然后,我拆分传入列表,每条消息现在都包含需要移动到其有效负载中下一个目录的文件名

我如何告诉入站通道适配器仅读取给定文件?我拥有从定义目录到该文件的完整路径,并将其复制/移动到下一个目录

这是我目前的配置:

<!-- File Adapters: Inbound -->
<file:inbound-channel-adapter 
          id="filesInChannelAdapter"
          filename-regex="/^#jsonPath(payload,'$.filename')$/"   <<< this does not work     
          directory="${inbound.dir}" />

<!-- Service Activators -->
<int:service-activator input-channel="filesInChannelAdapter"
                       output-channel="filesOutChannelAdapter"
                       id="fileCopyActivator"
                       method="handleFile"
                       ref="fileCopyHandler"/>

 <!-- File Adapters: Outbound -->
 <file:outbound-channel-adapter 
        id="filesOutChannelAdapter"
        preserve-timestamp="true"
        delete-source-files="true"
        directory="${outbound.dir}"/>
有没有一种不用轮询目录就可以读入文件的方法


在从数据库查询文件状态后,如何将文件从目录A复制到B?通过REST端点,FileWritingMessageHandler可以为您执行此操作。因此,您可以使用REST端点带来一个文件名,在DB中检查它的状态,例如通过,然后使用文件负载和文件转到。将为您执行移动。

谢谢!我会尝试一下,然后报告回来。我想在这一点上正确的问题是:将文件从其文件名加载到有效负载中以将其发送到出站通道适配器的正确方法是什么?这样做是新的Filepath/to/file/filename吗?是的,这是正确的。要执行Files.move,您必须提供文件负载。既然你已经有了它的路径,那对你来说应该很容易。注意:创建文件对象时,不会将其内容加载到内存中。这就是为什么我们在不影响Java内存的情况下使用特定于移动操作系统的实用程序!试一试,如果不行就回来怎么样;伟大的创建了一个变压器