当前位置: 首页 > 知识库问答 >
问题:

相同的文件在spring-ftp中被一次又一次地提取,但名称不同

须原
2023-03-14

我有一个Spring输入通道,定义如下

<file:inbound-channel-adapter prevent-duplicates="false" id="inpChannel" directory="file:/Users/abhisheksingh/req" auto-startup="true">
        <int:poller id="poller" fixed-delay="1000" />
</file:inbound-channel-adapter>

<int:service-activator input-channel="inpChannel" ref="inpHandler" />

文件名示例为test.sqq。SQQ是客户端用于将文件放在FTP中的文件格式。但是,我看到spring ftp适配器一次又一次地使用不同的文件名获取相同的文件。所以第一次是test.sqq。然后下一次是test.sqq-20170204.pqq,然后下一次是test.sqq-20170204.pqq.20170304.pqq。这种情况还在继续。我在我的一端有一个过滤器,它检查已经处理的文件的名称。但是,由于每次轮询的文件名不同,所有这些文件都被选中进行处理。

这是我的ftp适配器-

<int-ftp:inbound-channel-adapter id="sqqFtpInbound"
    channel="ftpChannel"
    session-factory="sqqFtpClientFactory"
    auto-create-local-directory="true"
    delete-remote-files="false"
    local-filter="acceptAllFileListFilter"
    local-directory="file:/Users/abhisheksingh/ddrive/everge_ws/sqqReq" auto-startup="true" >
    <int:poller id="poller" fixed-delay="1000" />
</int-ftp:inbound-channel-adapter>

我不明白为什么同一个文件被一次又一次地拿起。我会感谢你的帮助!

这是我的文件列表筛选器代码。

public class TestFileListFilter<F> extends AbstractFileListFilter<F> {

    private static final Logger log = LoggerFactory.getLogger(EvergeFileListFilter.class);

    @Override
    protected boolean accept(F file) {
        File f = (File) file;
        if(f.getAbsolutePath().contains(".PQQ")) {

            String newDir = "/Users/abhisheksingh/ddrive/sample/pqqReq/";

            String archiveLocation = "/Users/abhisheksingh/ddrive/sample/pqqArchive/";
            String fullName = archiveLocation + f.getName();
            log.info("Check if the file has already been processed " + fullName);

            File fl = new File(fullName);
            final File dir = new File(archiveLocation);
            for (final File child : dir.listFiles()) {

                String archiveName = FilenameUtils.getBaseName(child.getName());
                String inputName = FilenameUtils.getBaseName(fl.getName());
                log.info("Archive file name is " + archiveName);
                log.info("Input file name is " + inputName);
                if(inputName.contains(archiveName)) {
                    log.info("The file is already processed "+inputName);
                }

            }

            if(fl.exists()) {
                log.error("PQQ file has already been processed.");
                removeFile(f);
                return false;
            }else{
                log.info("PQQ File received " + f.getAbsolutePath());
            }
            moveFile(f, newDir);
            return true;
        }
    }

共有1个答案

咸昊昊
2023-03-14

我认为您的自定义local-filter存在一些漏洞,可以依赖不存在的事实来等待来自远程存储的唯一文件。

您应该确保该功能,因为它在默认情况下是不切换的。

为此,考虑将filter选项添加到 作为对acceptoncefilelistfilterftpppersistentacceptoncefilelistfilter的引用。

我们在这件事上有一个JIRA。

请确认这正是您的问题,我们可能会修改该票的优先级,并将很快修复它。

 类似资料:
  • 问题内容: 我正在尝试仅将原始文件从一个目录复制到另一个目录,但是某些文件具有相同的名称…我正在尝试使用哈希来比较文件,如果其不在目录中发送并且名称相同,它到file_name.something。目前,我正在获取一些文件,并且具有相同名称的文件正在被覆盖…任何人都可以提出建议吗? 问题答案: 您将哈希与文件名进行比较。你需要类似的东西 计算目标文件夹中每个文件的哈希值。 此外,在当前版本中,您的

  • 我对高级Java和可重入锁的学习相当陌生。我知道ReentrantLock有一个公平性参数,它确保将锁提供给最缺线程(与同步的内部锁不同) 但是,Reentrant也意味着同一线程可以通过递增holdcount来一次又一次地重新获取锁。如果同一个线程一直获得锁,它如何保证公平性?

  • 在Spring IOC中,bean的两个定义(具有相同的名称和类)是否有效? 我有两个bean定义文件包含在web中。xml。参见下面的示例。 应用Context-beans1.xml applicationContext-beans2。xml 到目前为止,我还没有遇到任何问题。但是,这可能会影响到多线程和集群的现实环境吗? 注意:这两个XMLs都被加载,因为我可以使用在这两个XMLs中定义的其他

  • 您好,我想平稳地更新seekbar,每秒钟更新一次,所以我创建了一个使用计时器的方法,每秒钟更新seekbar,但它每秒钟都在更新歌曲,我到处搜索,但没有找到解决方案,我不想使用任何处理程序,我想用这个方法修复 在这里我实现了歌曲开始时的方法 这是我的全部代码

  • 问题内容: 我正在做一个大项目,该项目很可能最终包含成千上万行代码,对于当前结构,我喜欢这样: 这样做的问题是controllers和models目录包含很多文件,全部使用和。因此,我正在考虑将其拆分为: 凡在控制器包的用户文件中可能包含的文件,等等。 现在,我读到像或那样的软件包是不好的做法,但是我担心对这两个软件包进行命名可能不是一个好主意,因为它们是同一项目的一部分(即使它们位于不同的目录中

  • 我有一个PDF文档,其中包含多个同名文本字段。 我想设置一次值()和每次出现该字段的值。这些字段可能在同一页或不同页(显然是同一文档)中。 当只有一个这样的字段时,可以生成PDF。如果有多个字段,则所有字段均显示为空。如果我禁用展平,我可以在每个字段中看到文本(尽管只有在单击字段后-奇怪…)。 这里是测试PDF。 编辑: 这个问题似乎只有在我设置字段的字体时才会发生。您可以使用此字体和以下代码进行