만들어가는 세상

[JAVA] 파일에서 확장자만 가져오기 본문

IT/JAVA

[JAVA] 파일에서 확장자만 가져오기

윤재웅 2020. 3. 10. 12:51

[JAVA] 파일에서 확장자만 또는 파일명만 가져오기  이 로직은 은근히 많이 사용되며, 자주 잊어버리거나, 귀차니즘이 있을때 한번 쓰고 다시 찾는 방법입니다. 

특히 알고리즘에서도 많이 쓰이는 IndexOf값을 이용한 위치 찾는 로직이 있는데 꽤 많이 쓰입니다.

int pos = val.lastIndexOf(".");
String ext = val.substring(pos+1, val.length());

방법1

test.png를 val 변수에 대입합니다.

allowPattern 에는 jpg, png값만 허용할수 있는 변수를 생성합니다.

Pattern.compile 메소드를 이용하여 하나의 Pattern이 만들어 집니다.

val.toLowerCase()는 확장자가 대,소문자가 올수 있기 때문에 전부 소문자로 변경합니다.

if문 조건에서 m.matches() 즉 png 또는 jpg의 확장자의 데이터가 들어오면 조건문이 실행 됩니다.

if문 조건에서는 확장자만을 추출하여 분기를 가지게 됩니다. 분기마다 다른 작업을 하는 if문 로직입니다.

String val = "test.png";
String allowPattern = ".+\\.(jpg|png)$";
Pattern p = Pattern.compile(allowPattern);
Matcher m = p.matcher(val.toLowerCase());

if(m.matches()) {

    //확장자만 추출
    int pos = val.lastIndexOf(".");
    String ext = val.substring(pos+1, val.length()); 
    if("jpg".equals(ext.toLowerCase())) {

    }else

    }
}

방법2

org.apache.commons.io.FilenameUtils의 getExtension() 메소드를 사용하면 확장자만 리턴됩니다.
위 방법에서는
int pos = val.lastIndexOf(".");
String ext = val.substring(pos+1, val.length());
이와 같은 방법을 사용하였습니다. 직관적인 방법은 아닙니다. 간결하게 사용하면서 한눈에 알아볼수 있는 방법은 방법2 입니다.

org.apache.commons.io.FilenameUtils 의 getExtension()
파일명이 test.png 라면 "png" 가 리턴되고 "a/b/c.png" 의 경우에도 png만 리턴됩니다.
String extension = FilenameUtils.getExtension(uploadfile.getOriginalFilename());
Comments