我目前正在处理 Spring Batch CSV Export。使用基于块的读取器、写入器、处理器。读取和处理工作完美无缺,但 FlatFileItemWriter 总是覆盖输出 CSV 文件。我希望作业检查文件是否存在(如果存在)增加文件名并写入新文件。
这是我当前的代码:我的 Helper 类,它检查 File 是否存在并返回新的 String 供 Writer 使用。
import java.io.File;
import org.springframework.stereotype.Component;
@Component
public class OrderFileManager {
private final String orderDesc = "order";
private final String fileEnding = ".csv";
public String getEmptyOrderNameString() {
int fileNumber = 1;
String answer = orderDesc + fileNumber + fileEnding;
while (new File(answer).exists()) {
fileNumber = fileNumber + 1;
answer = orderDesc + fileNumber + fileEnding;
}
return answer;
}
}
我的 ItemWriter :
@Bean
public FlatFileItemWriter<UltravisionOrder> writer(String fileName) {
FlatFileItemWriter<UltravisionOrder> writer = new FlatFileItemWriter<UltravisionOrder>();
writer.setResource(new FileSystemResource(fileName));
DelimitedLineAggregator<UltravisionOrder> delimitedLineAggregator = new DelimitedLineAggregator<UltravisionOrder>();
delimitedLineAggregator.setDelimiter(";");
BeanWrapperFieldExtractor<UltravisionOrder> fieldExtractor = new BeanWrapperFieldExtractor<UltravisionOrder>();
fieldExtractor.setNames(new String[] { "col1", "col2", "col3", ... });
delimitedLineAggregator.setFieldExtractor(fieldExtractor);
writer.setLineAggregator(delimitedLineAggregator);
return writer;
}
每次执行 Job 时,FileWriter 都会写入相同的输出文件。OrderFileManager 在 Job 中自动装配。并且作者收到 OrderFileManager。getEmptyOrderNameString() 作为参数。