Java에서 파일이나 디렉토리의 존재 여부를 확인하는 대표적인 방법은 크게 두 가지입니다.
- NIO 패키지 :
java.nio.file.Files클래스의exists()메서드 (Java 7 이상) - 레거시 IO 패키지 :
java.io.File클래스의exists()메서드
아래에서 각 방식별 예제 코드를 살펴보겠습니다.
Java NIO로 파일 존재 여부 확인하기
NIO 패키지에서는 Paths.get()으로 Path 객체를 생성한 뒤, Files.exists() 메서드로 파일의 존재 여부를 확인합니다.
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CheckFileExist {
public static void main(String[] args) {
Path path = Paths.get("/path/to/file/app.log");
if (Files.exists(path)) {
if (Files.isRegularFile(path)) {
System.out.println("앱 로그 파일이 존재합니다");
}
} else {
System.out.println("앱 로그 파일이 존재하지 않습니다");
}
}
}
Files.isRegularFile()을 함께 사용하면 해당 경로가 디렉토리가 아닌 일반 파일인지까지 검증할 수 있어 더욱 안전합니다.
Java NIO로 디렉토리 존재 여부 확인하기
디렉토리도 동일한 방식으로 확인하며, 이때는 경로가 실제 디렉토리인지 판단하는 Files.isDirectory() 메서드를 사용합니다.
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CheckDirectoryExist {
public static void main(String[] args) {
Path path = Paths.get("/path/to/logs/");
if (Files.exists(path)) {
if (Files.isDirectory(path)) {
System.out.println("로그 디렉토리가 존재합니다");
}
} else {
System.out.println("로그 디렉토리가 존재하지 않습니다");
}
}
}
NIO의 exists() 사용 시 주의 사항
Files.exists()는 기본적으로 심볼릭 링크를 따라가 링크 대상을 확인합니다. 링크 자체만 확인하려면LinkOption.NOFOLLOW_LINKS옵션을 인자로 전달하세요.- 파일이 실제로 없는 경우뿐 아니라 접근 권한이 없거나 I/O 오류가 발생한 경우에도
false를 반환할 수 있습니다. - "존재하지 않음"을 명확하게 판단하고 싶다면
Files.notExists()메서드를 사용하는 것이 좋습니다.
레거시 IO(File)로 파일 존재 여부 확인하기
Java NIO를 사용하지 않는 환경이라면 전통적인 java.io.File 클래스의 exists() 메서드를 사용할 수 있습니다.
import java.io.File;
public class CheckFileExists {
public static void main(String[] args) {
File file = new File("/path/to/file/app.log");
if(file.exists()) {
System.out.println("앱 로그 파일이 존재합니다");
} else {
System.out.println("앱 로그 파일이 존재하지 않습니다");
}
}
}
레거시 IO로 디렉토리 존재 여부 확인하기
디렉토리 여부는 isDirectory() 메서드로 간단하게 확인할 수 있습니다.
import java.io.File;
public class CheckDirectoryExists {
public static void main(String[] args) {
File file = new File("/path/to/logs/");
if(file.isDirectory()) {
System.out.println("로그 디렉토리가 존재합니다");
} else {
System.out.println("로그 디렉토리가 존재하지 않습니다");
}
}
}
마무리 정리
새로운 프로젝트라면 Java 7부터 도입된 NIO 방식(Files.exists)을 사용하는 것이 권장됩니다. 더 풍부한 파일 API와 개선된 예외 처리 등 다양한 장점을 제공하기 때문입니다. 반면, 레거시 코드베이스를 유지보수하거나 Java 6 이하 환경을 지원해야 한다면 File.exists() 방식을 그대로 활용하면 됩니다.