Я использую Spring Batch в проекте, над которым я сейчас работаю, и я могу успешно перенести файл в новый файл, но я изо всех сил пытаюсь переименовать этот файл файл. Вот моя конфигурация:Переименование файла на текущую дату и время Spring Batch
<j:step id="moveProcessedFile">
<j:tasklet ref="processedFileMove" allow-start-if-complete="true" />
</j:step>
<bean id="processedFileMove" class="com.ussco.wms.batch.wmcstint.MoveFileTasklet">
<property name="targetObject">
<bean class="JdkFileHandler" />
</property>
<property name="targetMethod" value="moveFile" />
<property name="arguments">
<list>
<value>${ipfile}</value>
<value>${ipfile.folder}</value>
</list>
</property>
</bean>
Это MoveFileTasklet. Это в значительной степени так же, как MethodInvokingTaskletAdapter:
public class MoveFileTasklet extends AbstractMethodInvokingDelegator<Object> implements Tasklet{
private static Logger log = LoggerFactory.getLogger(MoveFileTasklet.class);
//Create method for date and time rename within Tasklet. Implement execute as well
public boolean renameFile(File fileName){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm");
log.info("test");
return false;
}
/**
* Following methods directly copied from MethodInvokingTaskletAdapter
*/
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
contribution.setExitStatus(mapResult(invokeDelegateMethod()));
return RepeatStatus.FINISHED;
}
protected ExitStatus mapResult(Object result) {
if (result instanceof ExitStatus) {
return (ExitStatus) result;
}
return ExitStatus.COMPLETED;
}
}
где JdkFileHandler имеет метод moveFile
:
public boolean moveFile(File fileToMove, String targetDirectory) throws IOException {
return renameFile(fileToMove, new File(targetDirectory + FILE_SEPARATOR + fileToMove.getName()));
}
и renameFile:
private boolean renameFile(File fileToRename, File renamedTargetFile) throws IOException {
if (!fileToRename.exists()) {
throw new FileNotFoundException(fileToRename + " does not exist.");
} else if (!fileToRename.isFile()) {
throw new IOException(fileToRename + " is not a file and cannot be remaned.");
} else if (renamedTargetFile.exists()) {
throw new IOException(renamedTargetFile + " already exists so the file " + fileToRename
+ " cannot be renamed to it.");
}
return fileToRename.renameTo(renamedTargetFile);
}
Прямо сейчас я могу пошевелить файл в но мне нужно переименовать файл в fileNamemmddyyhhmmss
Кроме того, я не могу изменить какой-либо из методов в JdkFileHandler. Я хотел бы либо реализовать свой собственный метод в пределах MoveFileTasklet
, который я указал, либо другим способом.
Я знаю, что эта информация повсюду. Я не ищу код, как это сделать, как я должен действовать. Вид застрял прямо сейчас. Любой совет?
Итак, какой вам нужен метод добавления текущего времени к имени файла? Разве это не работает? – Julian
Да, это то, что я пытаюсь сделать в настоящее время. Я просто не уверен, как действовать дальше. Должно ли это быть правильное размещение метода renameFile (в пределах MoveFileTasklet)? –
Вы можете изменить метод, который добавляет время для возврата строки с текущим временем. Вы всегда возвращаете false на 'renameFile()' – Julian