#java #file #apache-camel
Вопрос:
Я использую file
компонент apache camel для чтения всех файлов из каталога. Основываясь на размере файла (если размер файла в списке не похож на то, что я сейчас читаю), я хочу пропустить файл и забрать его снова на следующей итерации. Возможно ли это? Мой обрезанный код выглядит следующим образом:
from("file://my/directroy/path/?recursive=trueamp;noop=trueamp;idempotent=false")
.aggregate(constant(true), new AggregationStrategy())
.completionSize(100).completionTimeout(100)
.split(body()).process(new Processor() {
public void process(Exchange exchange){
//Move this file only if the size is == new File("thisPath").length();
// othersize skip this for now and pick it up in next iteration
}
});
Комментарии:
1. Я столкнулся с этой проблемой из стратегии усиления. Он дважды добавлялся в список, поэтому файл загружался дважды. Решил эту проблему, удалив AggregationStrategy.
Ответ №1:
https://camel.apache.org/components/3.4.x/file-component.html
Согласно документации, вы можете использовать :
filterFile (filter)
Filters the file based on Simple language. For example to filter on file size, you can use ${file:size} 5000
Это выглядело бы примерно так:
from(file:{{replayDir}}/?filterFile=${file:size} 5000
Для простой языковой поддержки, пожалуйста, смотрите https://cwiki.apache.org/confluence/display/CAMEL/Simple