2016-08-02 5 views
0

Я использую 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, который я указал, либо другим способом.

Я знаю, что эта информация повсюду. Я не ищу код, как это сделать, как я должен действовать. Вид застрял прямо сейчас. Любой совет?

+0

Итак, какой вам нужен метод добавления текущего времени к имени файла? Разве это не работает? – Julian

+0

Да, это то, что я пытаюсь сделать в настоящее время. Я просто не уверен, как действовать дальше. Должно ли это быть правильное размещение метода renameFile (в пределах MoveFileTasklet)? –

+0

Вы можете изменить метод, который добавляет время для возврата строки с текущим временем. Вы всегда возвращаете false на 'renameFile()' – Julian

ответ

1

Публикация моей текущей реализации для перемещения архива и добавления текущего времени к имени файла.

public static void moveArchive(File file, String initDirectory, String destDirectory) { 
    File finalArchive; 
    File initialArchive = new File(initDirectory + file.getName()); 

    finalArchive = new File(destDirectory + file.getName() + "." + getCurrentDate("yyyyMMddHHmmss")); 

    if (!initialArchive.renameTo(finalArchive)) { 
     log.error("Couldn't move the file."); 
    } 
} 

public static String getCurrentDate(String format) { 
    String dtStr = ""; 
    SimpleDateFormat sdf = new SimpleDateFormat(format); 
    Date dt1 = new Date(); 

    dtStr = sdf.format(dt1); 

    return dtStr; 
} 
+0

Если это не сработает, скажите мне, чтобы я мог удалить это. – Julian

Смежные вопросы