File Upload Rename Policy(파일이름 중복 정책)

Published on: 2009. 7. 6. 16:40 by louis.dev


File Upload를 수행할때 이전에 있던 파일과 비교하여 같은 이름이 있을경우 파일명 뒤에 숫자를 붙여주는 역할을 한다.사용 예)


package com.myhome.upload.policy;

import java.io.File;
import java.io.IOException;

public class FileRenamePolicy {
  
  public File rename(File f) {             //File f는 원본 파일
    if (createNewFile(f)) return f;        //생성된 f가 중복되지 않으면 리턴
    
    String name = f.getName();
    String body = null;
    String ext = null;

    int dot = name.lastIndexOf(".");
    if (dot != -1) {                              //확장자가 없을때
      body = name.substring(0, dot);
      ext = name.substring(dot);
    } else {                                     //확장자가 있을때
      body = name;
      ext = "";
    }

    int count = 0;
    //중복된 파일이 있을때
    //파일이름뒤에 a숫자.확장자 이렇게 들어가게 되는데 숫자는 9999까지 된다.
    while (!createNewFile(f) && count < 9999) {  
      count++;
      String newName = body + count + ext;
      f = new File(f.getParent(), newName);
    }
    return f;
  }

  private boolean createNewFile(File f) { 
    try {
      return f.createNewFile();                        //존재하는 파일이 아니면
    }catch (IOException ignored) {
      return false;
    }
  }
}

다음과 같이 사용할 수 있다.
File file = new File(UploadUtil.SAVE + bean.getFileFileName());
file = new FileRenamePolicy().rename(file);