Java 7로 작성된 새로운 응용 프로그램의 java.io.File
경우 더 이상 객체 를 사용해야하는 이유가 있습니까? 아니면 더 이상 사용되지 않는 것으로 간주 될 수 있습니까?
나는 java.nio.file.Path
할 수있는 모든 것을 할 수 있다고 믿습니다 java.io.File
.
답변
간단히 말해 :
java.io.File
가능성이 가장 높은 것입니다 결코 / 지원되지 않는되지 없습니다. 즉, java.nio.file.Path
더 현대적인 java.nio.file
라이브러리의 일부이며 모든 것을 java.io.File
할 수 있지만 일반적으로 더 나은 방법으로 더 많이 수행합니다.
새 프로젝트의 경우을 사용하십시오 Path
.
File
레거시를 위한 객체 가 필요한 경우 Path # toFile ()
파일에서 경로로 마이그레이션
JDK 7의 NIO.2 파일 시스템에 대한 Janice J. Heiss와 Sharon Zakhour의 기사 (2009 년 5 월)
답변
더 이상 사용되지 않는 것으로 간주 할 수 있습니까?
아니, 당신은 할 수없는 그것을하지 않는 한 그것은 그래서으로 표시 될 때까지 사용되지 고려 File
의 Javadoc.
답변
자세한 정보는이 기사를 확인하십시오-http: //www.oracle.com/technetwork/articles/javase/nio-139333.html
기본적으로 file.Path는 앞으로 나아갈 길이지만 널리 알려진 Java 사람들은 이전 버전과의 호환성을 유지하는 경향이 있기 때문에 그들이 떠난 이유라고 생각합니다.
답변
의 아주 좋은 답변을 완성 할 것입니다 @mmcrae
.
java.io.File 객체를 더 이상 사용해야하는 이유가 있습니까? 아니면 더 이상 사용되지 않는다고 생각할 수 있습니까?
JDK 클래스는 거의 사용되지 않습니다. JDK 8 API 사용 중단 목록 에서 첫 번째 JDK 이후 사용되지 않는 모든 클래스를
볼 수 있습니다 .
여기에는 Oracle 설명서 및 Java 커뮤니티가 사용하지 않는 클래스의 일부만 포함되어 있습니다. 결함이 너무 많은 클래스 인 ,, …는 더 이상 사용되지 않습니다.
그런데 왜?
개념적으로 무언가가 여전히 존재하지만 매우 확실하게 제거 되기 때문에 사용하지 않는 것이기 때문입니다.
수천 개의 프로그램은 이러한 나쁜 디자인 클래스에 의존합니다.
이러한 클래스의 경우 Java API 개발자는 그러한 신호를주지 않습니다.
java.util.Date
java.util.Vector
java.util.Hashtable
deprecated
에 대한 답변은 @EJP
정말 옳습니다.
Javadoc에 그렇게 표시 될 때까지는 아닙니다.
따라서 귀하의 질문은 다음과 같은 관점에서 더 의미가 있다고 생각합니다.
“우리는 선택을해야하는지, java.io.File
아니면 java.nio.file.Path
새로운 개발을 위해 사용해야하는지, 아니면 새로운 개발을 위해 사용해야하는지, 그리고 대답이 그렇다면, 기존 프로젝트를 java.nio.file.Path
쉽게 활용할 수 있습니까?”java.io.File
java.io.File
java.nio.file.Path는 java.io.File이 할 수있는 모든 것을 할 수 있다고 생각합니다.
답이 있습니다.
레거시 IO에 대한 이 Oracle 자습서 는 여러분의 생각을 확인시켜줍니다.
Java SE 7 릴리스 이전에는
java.io.File
클래스가 파일 I / O에 사용 된 메커니즘 이었지만 몇 가지 단점이있었습니다.많은 메소드가 실패했을 때 예외를 발생시키지 않았으므로 유용한 오류 메시지를 얻는 것이 불가능했습니다. 예를 들어, 파일 삭제에 실패한 경우 프로그램은 “삭제 실패”를 수신하지만 파일이 존재하지 않거나 사용자에게 권한이 없거나 다른 문제가 있는지 여부를 알 수 없습니다.
여러 플랫폼에서 이름 바꾸기 방법이 일관되게 작동하지 않았습니다. 심볼릭 링크는 실제로 지원되지 않았습니다.
파일 권한, 파일 소유자 및 기타 보안 속성과 같은 메타 데이터에 대한 추가 지원이 필요했습니다.
파일 메타 데이터에 액세스하는 것이 비효율적이었습니다.
많은 File 메서드가 확장되지 않았습니다. 서버를 통해 큰 디렉토리 목록을 요청하면 정지 될 수 있습니다. 큰 디렉토리는 메모리 자원 문제를 야기하여 서비스 거부를 초래할 수 있습니다.
원형 심볼릭 링크가있는 경우 파일 트리를 재귀 적으로 탐색하고 적절하게 응답 할 수있는 안정적인 코드를 작성할 수 없었습니다.
에 대한 많은 단점이 있기 때문에 java.io.File
새로운 개발에이 클래스를 사용할 이유가 없습니다. 오라클은
레거시 코드를 사용하더라도 java.io.File
힌트를 제공합니다 Path
.
아마도 java.io.File을 사용하는 레거시 코드가 있고 코드에 미치는 영향을 최소화하면서 java.nio.file.Path 기능을 활용하려고합니다.
java.io.File 클래스는 다음과 같이 이전 스타일 File 인스턴스를 java.nio.file.Path 인스턴스로 변환하는 toPath 메소드를 제공합니다.
Path input = file.toPath();
그런 다음 Path 클래스에 사용 가능한 다양한 기능 세트를 활용할 수 있습니다.
예를 들어 파일을 삭제 한 코드가 있다고 가정합니다.
file.delete();
다음과 같이 Files.delete 메소드를 사용하도록이 코드를 수정할 수 있습니다.
Path fp = file.toPath();
Files.delete(fp);
답변
예. 그러나 Java7 자체 표준 API를 포함한 많은 기존 API는 여전히 File
유형 에서만 작동 합니다.
답변
Java.io.File은 더 이상 사용되지 않습니다. 예 java.nio.file.Path가 더 좋지만 Java.io.File을 사용하는 많은 프로그램과 교과서가 여전히있는 한 레거시 이유로 만 더 이상 사용되지 않는 것으로 간주해서는 안됩니다. 그렇게함으로써 모든 이득을 얻지 못한 채로 스패너를 던질 수 있습니다. 예를 들어 Android 프레임 워크는 기본 파일 처리 기능 중 일부를 위해 File을 사용하지만 다른 많은 기능도 있습니다.
답변
Java 7로 작성된 새로운 애플리케이션의 경우 java.io.File 객체를 더 이상 사용해야하는 이유가 있습니까?
“나폴레옹이 러시아를 침략해야 합니까 , 아니면 이 브뤼셀 콩나물이 정말 맛 있어야 합니까?”
질문의 두 번째 부분에 대해서는 실제로 사용되지 않는 것으로 간주 할 수 있습니다. 2018 년 1 월 기준으로 더 이상 사용되지 않습니다. 그러나 그렇게 생각 하는 것을 막을 수있는 것은 없습니다 . 그것이 당신에게이 생에서 어떤 이점을 얻을 수 있을지 아니면 다음 생에 말을하는지는 불가능합니다.