[Stackoverflow] java.io.File 클래스와 java.nio.Files 클래스 중 어느 것이 선호되는가?

like_ej_·2022년 10월 18일
0

Stackoverflow 리뷰

목록 보기
1/2

Q : java.io.File 클래스와 java.nio.Files 클래스 둘 중 새로운 코드에서 어느 것이 선호되는가? 그리고 그렇게 함으로써 장단점은 무엇인가?

1

하나의 좋은 이유는 파일 작업을 위한 파일 스트림들의 용이한 사용을 위해서이다. 예를 들면 파일의 목록을 스트림으로 읽을 때 ArrayList로 읽는 것 보다 낫다. - Umesh

2

NIO인 경우, 메모리로 매핑된 버퍼(Memory Mapped Buffers)가 파일 시스템에서 (메모리 내에 로드하지 않고) 직접적으로 파일을 매핑하는 것을 허용한다. 이건 힙공간을 거치지 않고 대량의 파일들을 처리하는 것을 가능하게 할 것이다. - Mik

A1 : 문서를 봐라

자바 API 문서 (https://docs.oracle.com/javase/7/docs/api/java/io/File.html)를 확인해 보면 해당 질문에 따른 답이 될 수 있을 것이다.

Interoperability with java.nio.file package

The java.nio.file package defines interfaces and classes for the Java virtual machine to access files, file attributes, and file systems. This API may be used to overcome many of the limitations of the java.io.File class. The toPath method may be used to obtain a Path that uses the abstract path represented by a File object to locate a file. The resulting Path may be used with the Files class to provide more efficient and extensive access to additional file operations, file attributes, and I/O exceptions to help diagnose errors when an operation on a file fails.

해석
해석

java.nio.file 패키지와의 상호 호환가능성

java.nio.file 패키지는 JVM이 파일과 파일 속성, 그리고 파일 시스템에 접근할 수 있는 인터페이스와 클래스를 정의하고 있다. 이러한 API는 java.io.File 클래스에서의 많은 제약사항들을 해결하는데에 사용될 수 있을 것이다. toPath 메서드는 파일을 지정하는 파일 객체로 대표되는 추상 경로(the abstract path)도 포함하여 사용할 수 있다. 결과적인 경로(the resulting path)도 추가적인 파일 작업 및 파일 속성과 I/O 예외들의 좀 더 효율적이고 확장적인 접근을 제공하는 Files 클래스와 함께 잘못된 파일에서 작업할 때의 에러들을 진단하는데 도움을 주기 위해 사용될 것이다.

A2

(Java NIO의) File(패키지)은 Path라는 것을 새로 구현해놓았다. 그리고 Files 클래스는 Paths.get("...") 빌더와 함께 좀 더 좋게 구현된 유용한 도구로써의 함수들을 제공한다. 예를 들면 java.io.File에 있는renameTo()와 같은 메서드 대신 java.nio.file.Files에서 move() 메서드를 제공하는 것처럼 말이다.

Path는 파일 시스템을 유지보수한다. "jar:file:...... .zip"과 같은 파일명을 가진 Zip 파일 시스템을 복제하거나 그 반대로도 그 이후의 작업을 할 수 있도록 한다.

File.toPath()는 경로로의 추가적인 파일 전환을 도와줄 수 있을지 모른다.

Files에서 제공되는 것들은 (파일 작업에) 유리한 새로운 클래스로 전환하게 만들어준다.

A3

어느것도 '선호'된다고 말할 수는 없을 것 같다. 반면에 java.io.File이나 java.nio.Files 둘 중 어플리케이션에서 요구되면서 그 요구사항을 만족하여 사용할 수 있는 기능적인 면에서 보는 것을 권장한다.

해당 (질문에 대한) 답변은 java.nio.Files가 더 낫다고 한숨에 결정되는 경향이 있는 것 같다. 그런데 이건 어떤 다른 SO 프로그래머를 통해서가 아닌 이를 사용하는 사람이나 팀에서 결정하는데에 따라 달라질 듯하다.

이러한 질문이 Java Community에서 활발하게 논의되어야 하는가?

거기에는 어떠한 주제라도 논의를 하고자 하는 사람들이 있는 것 같다. 근데 일반적으로 그 커뮤니티는 좀 더 중요한 논의점들이 있다. (거기에는 다른 중요한 질문 사항들이 많이 있다.)

profile
안녕하세요~!

0개의 댓글