如何使用Camel组件File2中的include参数通过扩展来过滤文件

时间:2013-02-25 04:24:17

标签: java file apache-camel

我需要扩展名最简单的过滤器: F.E.文件20120523.173227.CustomerMaster05092012.QWERTY.xml 路线:

<from uri="file://{{fdr.folder.working.url}}&amp;include=*.xml"/>

不起作用:

在索引0附近悬挂元字符'*'

WARN - file://root_folder/working/) [FileConsumer] Consumer Consumer[file://root_folder/working/?delay=1000&delete=true&idempotent=false&include=*.xml&initialDelay=1000&readLock=changed] failed polling endpoint: Endpoint[file://root_folder/working/?delay=1000&delete=true&idempotent=false&include=*.xml&initialDelay=1000&readLock=changed]. Will try again at next poll. Caused by: [java.util.regex.PatternSyntaxException - Dangling meta character '*' near index 0
*.xml
^]
java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0
*.xml
^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.sequence(Pattern.java:1878)
    at java.util.regex.Pattern.expr(Pattern.java:1752)
    at java.util.regex.Pattern.compile(Pattern.java:1460)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
    at java.util.regex.Pattern.matches(Pattern.java:928)
    at java.lang.String.matches(String.java:2090)
    at org.apache.camel.component.file.GenericFileConsumer.isMatched(GenericFileConsumer.java:458)
    at org.apache.camel.component.file.GenericFileConsumer.isValidFile(GenericFileConsumer.java:395)
    at org.apache.camel.component.file.FileConsumer.pollDirectory(FileConsumer.java:94)
    at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:107)
    at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:142)
    at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:92)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
好吧也许我的坏。我把整个文件包括在内:

<from uri="file://{{fdr.folder.working.url}}&amp;include=20120523.173227.CustomerMaster05092012.QWERTY.xml"/>

整个文件都可以。让我们尝试将*放在文件名

的中间
<from uri="file://{{fdr.folder.working.url}}&amp;include=20120523.*.xml"/>

再次没关系。我们只在文件名中放一个数字

<from uri="file://{{fdr.folder.working.url}}&amp;include=2*.xml"/>
noup,骆驼没有找到这样的文件 我试过逃过星号,但没有帮助。

<from uri="file://{{fdr.folder.working.url}}&amp;include=\*.xml"/>
and
<from uri="file://{{fdr.folder.working.url}}&amp;include=\\*.xml"/>

文件被忽略了。 所以问题1:如何使用星号?

和问题2:如何使用多种文件扩展名,例如include = .xml; .zip

THKS

3 个答案:

答案 0 :(得分:16)

该死的,善意的想法来了,用蛮力我找到了正确的值包括:

.*.xml|.*.zip

答案 1 :(得分:5)

(?i).*.xml|.*.zip

如果您希望不区分大小写的文件扩展名匹配。

答案 2 :(得分:4)

你必须正确地转义字符串中的反斜杠并使用字符串符号结尾&#39; $&#39;:include=.*\\.xml$