2016-08-02 30 views
0

現在作業中のプロジェクトでSpringバッチを使用していますが、ファイルを新しいファイルに正常に移動できますが、名前を変更するのに苦労していますファイルも同様です。ここに私の設定です:ファイル名を現在の日付と時刻に変更するバッチバッチ

<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と同じです:

JdkFileHandlerは方法 moveFileあり
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; 
    } 

} 

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

はい、それは私が現在やろうとしていることです。どのように進めるか分かりません。これは、(MoveFileTasklet内の)renameFileメソッドを適切に配置する必要がありますか? –

+0

時刻を付加して現在の時刻の文字列を返すメソッドを変更することができます。あなたは常に 'renameFile()'にfalseを返しています。 – 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

関連する問題