Java에서 파일 이름의 유효성 체크 및 이름 바꾸기..

기본적으로 OS에서는 특수 캐릭터가 예약되어 있어, 파일 이름으로 사용할 수 없다.

그래서, 프로그램에서 파일 관련 작업을 하기 전에, 파일 이름에 대한 유효성 체크와 파일 이름에 대한 변환이 필요한 경우가 있다. 위에 대한 내용은, http://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words나 http://msdn.microsoft.com/en-us/library/aa365247%28v=vs.85%29.aspx#naming_conventions에서 OS별로 예약되어 있는 캐릭터와 파일의 길이를 확인할 수 있다.

아래는 위의 MSDN 링크(윈도우 OS)에 나와 있는 대표적인 캐릭터이고, 추가적인 문자열은 위 링크에서 확인할 수 있다.

< (less than)
> (greater than)
: (colon)
” (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)

아래는 자바로 위의 제약조건에 대한 확인을 제공하는 클래스이다.

import java.util.regex.Pattern;
public class FileNameUtil {
	// 파일이름 확인..
	static final String ILLEGAL_EXP = "[:\\\\/%*?:|\"<>]";

	/**
	 * 파일 이름이 유효한지 확인한다.
	 * 
	 * @author mcsong@gmail.com
	 * @param fileName 파일의 이름, Path를 제외한 순수한 파일의 이름.. 
	 * @return
	 */
	public static boolean isValidFileName(String fileName) {
	    if(fileName == null || fileName.trim().length() == 0)
	    	return false;

		return !Pattern.compile(ILLEGAL_EXP).matcher(fileName).find();
	}

	/**
	 * 파일 이름에 사용할 수 없는 캐릭터를 바꿔서 유효한 파일로 만든다.
	 * 
	 * @author mcsong@gmail.com
	 * @param fileName 파일 이름, Path를 제외한 순수한 파일의 이름..
	 * @param replaceStr 파일 이름에 사용할 수 없는 캐릭터의 교체 문자
	 * @return
	 */
	public static String makeValidFileName(String fileName, String replaceStr) {
	    if(fileName == null || fileName.trim().length() == 0 || replaceStr == null)
	    	return String.valueOf(System.currentTimeMillis());		

	    return fileName.replaceAll(ILLEGAL_EXP, replaceStr);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {

	    String c = "!\"#$%&(){}@`*:+;-.<>,^~|'[]akdfsjhex.txt"; 

	    System.out.println("bbbb --> " + isValidFileName("abcde.jpg"));
	    System.out.println("bbbb --> " + isValidFileName(c));
	    System.out.println("bbbb --> " + makeValidFileName(c, "_") );        
	}
}

위 코드는 자바 환경인 안드로이드에서도 사용할 수 있다.

Java에서 파일 이름의 유효성 체크 및 이름 바꾸기..”에 대한 1개의 생각

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.