我正在使用Apache Camel构建应用程序。 在此应用程序中,两个与xml文件同名并且jpg扩展名的文件放在特定目录中。 我们将使用Apache Camel的file2组件处理此文件。 我使用Apache Camel版本2.19.0
我想满足以下规格。 1.处理完成后,将xml文件和配对的jpg文件移动到done目录 2.处理失败时,将xml文件和配对的jpg文件移动到错误目录
目录结构如下。
main/ftp/20170605-110000.xml /20170605-110000.jpg main/done/20170604-090000.xml 20170604-090000.jpg main/error/20170604-090000.xml 20170604-090000.jpg
我已满足以下代码所需的行为。
public class ExampleRoute extends RouteBuilder {
private final File ftpDir;
private final File doneDir;
private final File errorDir;
public ExampleRoute() {
this.ftpDir = new File("work/main/ftp");
this.doneDir = new File("work/main/done");
this.errorDir = new File("work/main/error");
}
@Override
public void configure() throws Exception {
String format = "file://%s?include=.*.xml&move=%s&moveFailed=%s";
String from = String.format(format,
ftpDir.getAbsolutePath(),
doneDir.getAbsolutePath(),
errorDir.getAbsolutePath());
// @formatter:off
onException(Exception.class)
.handled(false)
.process(new MoveResourceProcessor((errorDir)))
.stop();
// @formatter:on
// @formatter:off
from(from)
.process(exchange -> {
// Nothing to do...
})
.process(new MoveResourceProcessor(doneDir))
.end();
// @formatter:on
}
private class MoveResourceProcessor implements Processor {
private final File dir;
public MoveResourceProcessor(File dir) {
this.dir = dir;
}
@Override
public void process(Exchange exchange) throws Exception {
String parent = (String) exchange.getIn().getHeader(Exchange.FILE_PARENT);
File parentDir = new File(parent);
String filename = (String) exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY);
String baseName = FilenameUtils.getBaseName(filename);
File source = new File(parentDir, baseName + ".jpg");
if (source.exists()) {
File dest = new File(dir, source.getName());
FileUtils.moveFile(source, dest);
}
}
}
}
但有没有更好的方法来安排与这些目标文件相关的多个文件?