java.io.File에 close () 메서드가없는 이유는 무엇입니까?


123

방법 이 있지만 java.io.RandomAccessFile그렇지 않습니다. 왜 그런 겁니까? 완료시 파일이 자동으로 닫히나요?close()java.io.File

감사!


3
Java API를 살펴보면 바로 답을 얻을 수 있습니다.
gigadot 2011 년

43
나는 사람들이 다른 훌륭한 자바 사양보다 더 도움이된다는 것을 배웠다.
Albus Dumbledore 2011 년

6
b / c 그것은 열 수 없습니다 :)
bestsss

6
아무것도 열지 않기 때문입니다. 그리고 사람들은 공식적인 Java 사양보다 훨씬 신뢰할 수 있습니다.
Marquis of Lorne

답변:


141

File클래스 의 javadoc은 클래스를 다음과 같이 설명합니다.

파일 및 디렉토리 경로 이름의 추상적 인 표현입니다.

File파일 시스템 (예 :) exists()및 디렉터리 처리 와 관련된 몇 가지 메서드가있는 경로 이름의 표현 일 뿐이지 만 실제 스트리밍 입력 및 출력은 다른 곳에서 수행됩니다. 스트림은 열고 닫을 수 있지만 파일은 열 수 없습니다.

(내 개인적인 의견은 Sun이 RandomAccessFile.


72

java.io.File열린 파일 이 아니라 파일 시스템의 경로를 나타냅니다. 그러므로 close그것에 방법을 갖는 것은 의미가 없습니다.

사실,이 클래스는 라이브러리 작성자에 의해 이름이 잘못 지정되었으므로 Path.


그렇다면 모든 디렉토리 나열 방법은 어떻습니까? Path완전히 분리 되었어야합니다 .
biziclop 2011 년

3
동의하지만 어쨌든 File 또는 RandomAccessFile의 이름이 잘못되었습니다. RandomAccessFileStream과 같은 것이 더 나을 수 있지만 지금은 너무 늦었습니다.
maaartinus 2011 년

7
"사실,이 클래스는 라이브러리 작성자가 잘못 명명했습니다. Path와 같은 이름이어야합니다."-> 그들은 당신을 들었습니다. nio (New I / O) 패키지에서 유사한 클래스의 이름은 이제 Path입니다. docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
mins

6

본질적으로 랜덤 액세스 파일은 랜덤 액세스를 관리하기 위해 입력 및 출력 스트림을 래핑합니다. 파일을 열고 닫지 않고 파일에 대한 스트림을 열고 닫습니다.


1
예. 나는 java.io.RandomAccessFile을 많이 보지 않았습니다. 나는 항상 그것이 java.io.File을 무시한다고 가정했지만 그렇지 않습니다!. 파일은 경로를 나타냅니다. RandomAccessFile은 스트림이 할 수있는 것처럼 디스크 I / O를 수행 할 수있는 객체입니다. 구현은 훨씬 다르지만 스트리밍 액세스가 아닌 임의 액세스를 허용합니다.
Steve Cohen

6

BufferedReader는 열고 닫을 수 있지만 파일은 열리지 않고 파일 시스템의 경로를 나타냅니다.


4

당신은

File f  = new File("SomeFile");
f.length();

Files는 경로의 표현 일 뿐이므로 닫을 필요가 없습니다 .

항상 독자 / 작가 및 실제로 스트림 만 닫는 것을 고려해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.