如何在骆驼XML路径中删除一部分文件名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在骆驼XML路径中删除一部分文件名相关的知识,希望对你有一定的参考价值。

我有一个用XML定义的骆驼路线,该路线会拾取AB1234-20141113.txt格式的文件,并将其移动到ftp服务器。我需要重命名路由中的文件,以去除-和.txt之间的日期部分,以便ftp服务器上的文件为AB1234.txt。

您可以从下面的示例路由定义中看到,成功或失败后,在本地计算机上移动文件时,我已使用from uri中的File Expression语言将其添加到文件名中,但是我看不到任何简单的应用方法在ftp uri中使用正则表达式或子字符串转换。

<route id="outboundoFtpPoller">
    <from uri="file:/generatedFiles?move=done/${date:now:yyyyMMdd}/${file:name}&amp;moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"/>
    <to uri="ftp:{{ftp.server}}{{ftp.subdirectory}}/outbox/<what goes here?>" />
</route>

欢迎提供有关本节中要实现的目标的任何建议,或者有关如何以略有不同的方式实现目标的任何建议,但必须使用骆驼,并且必须保留路线定义在XML中。

答案

您可以添加此处理器,该处理器使用正则表达式设置文件名,然后再将文件发送到ftp生产者

<route id="outboundoFtpPoller">
    <from uri="file:/generatedFiles?move=done/${date:now:yyyyMMdd}/${file:name}&amp;moveFailed=failed/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${file:ext}"/>
    <bean id="myProcessor" class="mypackage.MyProcessor"/>
    <to uri="ftp:{{ftp.server}}{{ftp.subdirectory}}/outbox/<what goes here?>" />
</route>

我的处理器在哪里

public class MyProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        String fileName = exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY, String.class).replaceAll("-\d+", "");
        exchange.getIn().setHeader(Exchange.FILE_NAME,fileName);
    }
}

UPDATE不使用处理器,请尝试添加此]

  <setHeader headerName="CamelFileName">
            <simple>${in.header.CamelFileName.replaceAll("-d+","")}</simple>
        </setHeader>
另一答案

@@ ltsallas如何在不使用处理器的情况下将

以上是关于如何在骆驼XML路径中删除一部分文件名的主要内容,如果未能解决你的问题,请参考以下文章

骆驼,如何删除smb共享上的文件?

如何使骆驼简单表达式与spring xml中的属性占位符一起使用

将片段附加到framelayout时如何删除空格

从 xml 片段中删除 html 标签? [复制]

在 Java 中运行时添加骆驼路线

如何在按钮单击时添加/删除片段?