Java 在流式传输时,如何重命名放置在远程位置的文件

Java 在流式传输时,如何重命名放置在远程位置的文件,java,streaming,file-rename,spring-integration-sftp,Java,Streaming,File Rename,Spring Integration Sftp,当我从远程目录流式传输文件时,我想给文件添加一些临时后缀 我正在使用SpringIntegrationDSL从远程目录流式传输文件,我希望确保单个应用程序一次读取一个文件。所以我想在文件流化时添加一些临时前缀。我正在使用出站网关获取数据 任何指针都会非常有用。目前,我正在读取之前和读取之后重命名该文件,我真的不想这样做。我会使用Apache Commons FileUtils 通常,我所做的是在初始传输期间将文件写入临时工作目录。文件完全传输后,我会进行校验和,以确保文件正确无误。此时,我将文件

当我从远程目录流式传输文件时,我想给文件添加一些临时后缀

我正在使用SpringIntegrationDSL从远程目录流式传输文件,我希望确保单个应用程序一次读取一个文件。所以我想在文件流化时添加一些临时前缀。我正在使用出站网关获取数据


任何指针都会非常有用。目前,我正在读取之前和读取之后重命名该文件,我真的不想这样做。

我会使用Apache Commons FileUtils


通常,我所做的是在初始传输期间将文件写入临时工作目录。文件完全传输后,我会进行校验和,以确保文件正确无误。此时,我将文件移动到其他应用程序逻辑使用的最终目录。只要工作目录和最终目录在同一个文件系统上,移动就会是原子的。这将保证使用该文件的应用程序的不同部分之间没有竞争条件

考虑使用文件锁定,而不是重命名。以下是
13.2阅读文件
文档中的相关部分:

当多个进程从同一目录读取时,最好锁定文件,以防止同时拾取它们。为此,可以使用FileLocker。有一个现成的基于java.nio的实现,但是也可以实现您自己的锁定方案。nio锁柜可按如下方式注入:


您可以按如下方式配置自定义锁柜:


[注] 当文件入站适配器配置了锁定器时,它将负责在允许接收文件之前获取锁定。它将不承担解锁文件的责任。如果您已经处理了该文件并将锁挂在周围,则会出现内存泄漏。如果在您的情况下这是一个问题,您应该在适当的时间自己调用FileLocker.unlock(File File)


有关更多信息,请参阅文档。

我正在使用Sftp.outboundGateway(sftpSessionFactory(),获取“payload.remoteDirectory+payload.filename”).options(STREAM.temporaryFileSuffix(_reading))。如何在此应用锁定。有关详细信息,请参阅[Interface FileLocker][2]和[Class NioFileLocker][3]的文档。(参见上述文章底部的链接)