Java에서 파일 조작에 필요한 API로 오랜 기간동안 사용되어온 java.io.File과 Java 7에서 도입된 java.nio.file.Files는 둘 다 파일 시스템 조작을 위한 도구이지만, java.nio.file.Files가 왜 더 선호되는지에 대해 자세하게 알아보겠습니다.
java.io.File의 한계와 문제점
1. Blocking I/O의 한계
java.io.File은 기본적으로 Blocking I/O만을 지원합니다. 이는 파일 작업이 끝날 때까지 스레드가 블록되어 다른 작업을 수행할 수 없다는 의미입니다. 대규모 애플리케이션에서는 효율적인 리소스 활용이 어려울 수 있습니다.
2. 디렉터리 및 파일 조작의 제한
java.io.File은 디렉터리를 다루는 데에 제약이 있습니다. 디렉터리를 조작하거나 디렉터리 내의 파일 목록을 검색하는 작업이 다소 불편합니다.
3. 풍부한 기능의 부재
java.io.File은 단순한 파일 정보 수집 및 경로 조작에만 중점을 둔 API입니다. 고급 파일 조작 기능이나 파일 시스템 속성(attribute)에 접근하는 기능이 부족합니다.
java.nio.file.Files의 강점과 혁신
1. Non-blocking I/O 지원
java.nio.file.Files는 Java 7에서 도입된 NIO.2 API의 핵심입니다. 이는 Non-blocking I/O를 지원하여 비동기 작업을 수행할 수 있습니다. 이로써 I/O 작업이 끝날 때까지 스레드가 블록되지 않고도 다른 작업을 수행할 수 있습니다.
2. Symbolic link 및 파일 속성 다루기
java.nio.file.Files는 Symbolic link를 다루거나 파일 속성(attribute)에 접근하는 등의 고급 기능을 제공합니다. 이는 더 복잡한 파일 조작이 필요한 경우 유용합니다.
3. 유연한 디렉터리 및 파일 목록 조작
java.nio.file.Files는 Files.list(), Files.walk(), Files.find() 등의 메서드를 제공하여 디렉터리 내의 파일 목록을 효율적으로 다룰 수 있습니다. 디렉터리를 조작하거나 검색하는 작업이 더 간편해졌습니다.
4. API의 일관성 및 간결성
java.nio.file.Files는 java.nio.file 패키지의 다른 클래스와 함께 일관된 API 디자인을 제공합니다. 이는 코드를 간결하게 작성할 수 있도록 도와줍니다.
실제 사용 사례
1. java.io.File 사용 예시:
File file = new File("/path/to/file.txt");
if (file.exists()) {
// 파일이 존재하는 경우의 처리
}
2. java.nio.file.Files 사용 예시:
Path path = Paths.get("/path/to/file.txt");
try {
if (Files.exists(path)) {
// 파일이 존재하는 경우의 처리
}
} catch (IOException e) {
e.printStackTrace();
}
'back end > java' 카테고리의 다른 글
spring boot session timeout setting (0) | 2023.11.16 |
---|---|
[Java] 파일, 폴더(디렉토리) 삭제하는 방법 (0) | 2023.11.09 |
Gson을 사용한 Java 8 LocalDateTime의 직렬화 및 역직렬화 (0) | 2023.11.05 |
자바 클래스 파일 버전 확인하는 방법 (0) | 2023.11.05 |
Spring Boot JPA에서 SQL 로그 출력하기 (0) | 2023.11.05 |