Java - 확장자 없이 파일 이름 가져오기

파일 이름에서 확장자 없이 이름만 가져오는 방법을 소개합니다.

1. lastIndexOf(), substring()으로 파일 이름 가져오기

lastIndexOf('.')는 문자열에서 마지막 .의 index를 가져옵니다. Index 0에서 .의 Index까지만 자르면 확장자를 제외한 이름을 가져올 수 있습니다.

public class Example {

    public static void main(String args[]) {

        String fileName = "example.txt";
        String fileNameWithoutExtension =
                fileName.substring(0, fileName.lastIndexOf('.'));
        System.out.println(fileNameWithoutExtension);
    }
}

Output:

example

위와 같은 내용을 함수로 만들어 사용할 수 있습니다. .이 존재하지 않을 때 lastIndexOf()는 -1을 리턴하며 이 때는 인자로 전달받은 이름을 다시 리턴하면 됩니다.

public class Example {

    public static String getFileNameWithoutExtension(String fileName) {
        int lastIndex = fileName.lastIndexOf('.');
        if (lastIndex == -1) {
            return fileName;
        }
        return fileName.substring(0, fileName.lastIndexOf('.'));
    }

    public static void main(String args[]) {

        System.out.println(getFileNameWithoutExtension("example.txt"));
        System.out.println(getFileNameWithoutExtension("my_photo.image"));
        System.out.println(getFileNameWithoutExtension("my_video"));
    }
}

Output:

example
my_photo
my_video

2. 정규표현식으로 파일 이름 가져오기

replaceAll(pattern, replacement)는 문자열에서 patten에 해당하는 것을 replacement로 변경합니다. 만약 확장자에 대한 패턴을 찾아서 빈 문자열로 교체하면 이름만 남게 됩니다.

아래 예제는 문자열에서 .XXX 패턴을 찾아서 제거하여 파일 이름을 찾는 예제입니다.

public class Example {

    public static void main(String args[]) {

        String fileName = "example.txt";
        String fileNameWithoutExtension = fileName.replaceAll("\\.\\w+$", "");
        System.out.println(fileNameWithoutExtension);
    }
}

Output:

example

위의 예제에서 사용된 정규표현식의 의미는 아래와 같습니다.

  • \\w : 알파벳, 숫자, '_' 중에 한 문자를 의미
  • + : 1회 이상 반복되는 문자를 의미
  • $ : 문자열 맨 끝을 의미

3. Commons 라이브러리로 파일 이름 가져오기

FilenameUtils.getBaseName()는 인자로 전달된 파일이름이나, 경로에서 확장자를 제외한 파일이름만 가져옵니다. 확장자 뿐만 아니라 파일 경로도 함께 제거됩니다.

import org.apache.commons.io.FilenameUtils;

public class Example {

    public static void main(String args[]) {

        System.out.println(FilenameUtils.getBaseName("example.txt"));
        System.out.println(FilenameUtils.getBaseName("/path/to/example.txt"));
    }
}

Output:

example
example

만약 파일 경로를 제거하지 않고, 확장자만 제거하고 싶다면 아래와 같이 FilenameUtils.removeExtension()를 사용하여 파일 이름을 가져올 수 있습니다.

import org.apache.commons.io.FilenameUtils;

public class Example {

    public static void main(String args[]) {

        System.out.println(FilenameUtils.removeExtension("example.txt"));
        System.out.println(FilenameUtils.removeExtension("/path/to/example.txt"));
    }
}

Output:

example
/path/to/example
Loading script...
codechachaCopyright ©2019 codechacha