如何处理与Apache Camel配对的两个文件

时间:2017-06-06 14:19:00

标签: java apache-camel

我正在使用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);
            }
        }
    }
}

但有没有更好的方法来安排与这些目标文件相关的多个文件?

0 个答案:

没有答案