使用Spring Integration Files自定义文件重命名

时间:2018-04-19 11:27:31

标签: spring spring-integration

我希望在使用自定义重命名(例如字符串,时间戳等)将文件从一个文件夹移动到另一个文件夹时添加重命名功能。

阅读this post后,我可以重命名如下:

@Bean
@ServiceActivator(inputChannel = FILE_CHANNEL_SOURCE)
public MessageHandler moveFiles() {
    FileWritingMessageHandler handler = new FileWritingMessageHandler(new File(processingDir));
    handler.setFileExistsMode(FileExistsMode.FAIL);
    handler.setDeleteSourceFiles(true);
    handler.setExpectReply(false);
    handler.setFileNameGenerator(processingFileNameGenerator());
    return handler;
}

@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
    DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();
    defaultFileNameGenerator.setExpression("payload.name + '.processing'");
    return defaultFileNameGenerator;
}

但我想像这样重命名:

@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
    DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();

    String timestamp = String.valueOf(System.currentTimeMillis()); // Or any custom String here

    defaultFileNameGenerator.setExpression("payload.name" + timestamp);
    return defaultFileNameGenerator;
}

但是DefaultFileNameGenerator无法处理这个'表达式',那么我们该如何做呢?

1 个答案:

答案 0 :(得分:1)

我实际上今天找到了答案,我希望你能发现这个代码对那些试图达到同样目标的人有用。

@Bean
public DefaultFileNameGenerator processingFileNameGenerator() {
    DefaultFileNameGenerator defaultFileNameGenerator = new DefaultFileNameGenerator();

    String timestamp = String.valueOf(System.currentTimeMillis());
    String expression = fileHelper.toExpression("payload.name + '.{}'", timestamp);

    defaultFileNameGenerator.setExpression(expression);
    return defaultFileNameGenerator;
}

FileHelper.class:

public class FileHelper {
    public String toExpression(String message, String... params){
        return MessageFormatter.arrayFormat(message, params).getMessage();
    }
}