2013-02-25 16 views
5

Tôi cần bộ lọc đơn giản nhất theo tiện ích mở rộng: f.e. nộp 20120523.173227.CustomerMaster05092012.QWERTY.xml tuyến đường:Cách lọc tệp theo tiện ích sử dụng tham số bao gồm trong thành phần Camel File2

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

không hoạt động:

lơ lửng vật meta '*' gần index 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) 

ok có lẽ xấu của tôi. Tôi đặt toàn bộ tệp để bao gồm:

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

Toàn bộ tệp là OK. Hãy thử đặt * ở giữa tên tệp

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

và một lần nữa là OK. Hãy đặt chỉ có một chữ số trong tên tập tin

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

noup, lạc đà không tìm thấy tập tin như vậy tôi đã cố gắng thoát khỏi dấu hoa thị nhưng nó did't giúp đỡ.

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

Tệp vừa bị bỏ qua. để câu hỏi 1: cách sử dụng dấu hoa thị?

và câu hỏi 2: cách sử dụng các tiện ích mở rộng tệp đa phương tiện, như include = .xml; .zip

thks

Trả lời

11

chết tiệt, {хорошая мысля приходит опосля}, sử dụng brute force tôi phát hiện ra giá trị chính xác cho bao gồm:

.*.xml|.*.zip 
+5

Có chỉ là một biểu hiện thường xuyên của nó, vì vậy những gì bạn có thể làm với Java API biểu thức thông thường là một phần của bộ lọc đó. –

+0

Bạn có thể đánh dấu câu hỏi này là đã trả lời không? –

+2

Bạn nên thoát khỏi 'cuối cùng'. tính cách. Nếu không, bạn sẽ khớp các tệp như fooxml hoặc barzip – Artur

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

Nếu bạn muốn trường hợp tập tin nhạy cảm phù hợp với phần mở rộng .

+2

Thứ hai '.' phải được thoát: '. * \. xml |. * \. zip'. Nếu không, tức là. 'sample.axml' cũng sẽ được xử lý. – chris

0

Các câu trả lời này hơi sai khi chúng chấp nhận foobarxml thông qua bộ lọc. câu trả lời đúng là:

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

Bạn cần phải thoát ra đúng dấu chéo ngược trong chuỗi và sử dụng cuối chuỗi dấu '$': include=.*\\.xml$