파일의 이름은 파일 이름과 확장자로 되어있는데, 파일명과 확장자를 분리하여 가져오는 방법에 대해서 알아보겠습니다.

예를 들어, example.txt 파일에서 example과 txt를 따로 얻는 것입니다.

1. lastIndexOf()로 파일명, 확장자 얻기

파일 이름을 fileName 변수로 가져왔다고 가정하고, 파일명과 확장자를 분리하는 코드를 작성하였습니다.

  • fileName.lastIndexOf(".") : fileName 문자열의 오른쪽에서 . 문자를 찾고 index를 리턴
  • string.substring(index) : 문자열에서 index부터 마지막 Index 범위의 문자열을 잘라서 리턴
  • fileName.substring(lastDotIndex + 1) : . 문자의 다음 위치부터 마지막 문자까지 잘라서 리턴
  • 파일 이름에서 . 문자가 없으면 잘못된 파일로 처리
public class Example {

    public static void main(String[] args) {

        String fileName = "example.txt";
        int lastDotIndex = fileName.lastIndexOf(".");
        if (lastDotIndex != -1) {
            String nameWithoutExtension = fileName.substring(0, lastDotIndex);
            String extension = fileName.substring(lastDotIndex + 1);

            System.out.println("File Name: " + nameWithoutExtension);
            System.out.println("Extension: " + extension);
        } else {
            System.out.println("Invalid file name");
        }
    }
}

Output:

File Name: example
Extension: txt

2. 파일 경로에서 파일명, 확장자 얻기

파일 경로의 경우, 위와 같은 방식으로 파일명과 확장자를 분리할 수 없습니다.

"/home/test/files/example.txt"의 경우, 위처럼 분리하면 아래처럼 됩니다.

  • 파일명: "/home/test/files/example"
  • 확장자: "txt"

이것을 해결하려면, 아래와 같이 마지막 slash /의 위치를 찾고, substring()으로 잘라줘야 합니다.

  • / 문자 포함 여부로 파일명이 전체 경로인지, 파일 이름인지 알 수 있음, if문으로 두 경우 모두 처리
  • fileName.lastIndexOf("/") : 마지막 / 문자의 index 리턴
  • substring(lastSlashIndex + 1, lastDotIndex) : 마지막 / 다음 문자부터 . 이전 문자까지 잘라서 리턴
public class Example {

    public static void main(String[] args) {

        String fileName = "/home/test/files/example.txt";
        int lastDotIndex = fileName.lastIndexOf(".");

        if (lastDotIndex != -1) {
            String extension = fileName.substring(lastDotIndex + 1);
            String nameWithoutExtension;
            int lastSlashIndex = fileName.lastIndexOf("/");
            if (lastSlashIndex != -1) {
                nameWithoutExtension = fileName.substring(lastSlashIndex + 1, lastDotIndex);
            } else {
                nameWithoutExtension = fileName.substring(0, lastDotIndex);
            }
            System.out.println("File Name: " + nameWithoutExtension);
            System.out.println("Extension: " + extension);
        } else {
            System.out.println("Invalid file name");
        }
    }
}

Output:

File Name: example
Extension: txt