back end/java

파일 조작의 새로운 길, `java.nio.file.Files` vs `java.io.File`

노루아부지 2023. 11. 9. 17:28

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();
}
728x90
loading