2010-03-23 4 views

답변

10

불가능합니다. (Java API의 FileInputStream에서 가져온 것이 아님) FileInputStream 생성자는 모든 필드에이 정보를 저장하지 않습니다 추상화와 캡슐화 :

public FileInputStream(File file) throws FileNotFoundException { 
    String name = (file != null ? file.getPath() : null); 
    SecurityManager security = System.getSecurityManager(); 
    if (security != null) { 
     security.checkRead(name); 
    } 
     if (name == null) { 
      throw new NullPointerException(); 
     } 
    fd = new FileDescriptor(); 
    open(name); 
    } 
9

InputStream이 파일이나 경로가 아니기 때문에 할 수 없습니다. 즉시 데이터를 생성하는 InputStream을 구현할 수 있습니다.

0

두 가지 중요한 객체 지향 설계 원칙은 당신이 요구하는지하는 일에서 당신을 방지 할 수 있습니다.

  • 추상화 특정 상황에서의 사용 (자세한 here) 만 필요한 세부 정보가 일반적인 개념을 정의하는 과정이다. 이 상황에서 추상화는 InputStream이며, 해당 바이트의 원본과 관계없이 바이트를 제공 할 수있는 일반 인터페이스입니다.. InputStream의 추상화에는 파일 경로 개념이 없습니다. 이는 InputStream의 특정 구현에만 관련이 있습니다.
  • 캡슐화은 해당 클래스의 소비자/사용자로부터 클래스의 구현 세부 사항을 숨기는 프로세스입니다. 이 특정 상황에서 FileInputStream은 해당 정보가 용도와 관련이 없으므로 InputStream이므로 읽는 파일의 세부 정보를 캡슐화합니다. path 인스턴스 필드는 이며 캡슐화 된이므로 클래스 사용자는 사용할 수 없습니다.

는 몇 가지 중요한 제한을 수용하고자하는 경우 path 변수에 액세스 가능하다,라고 말했다 가졌어요. 기본적으로 InputStream이 실제로 FileInputStream의 인스턴스인지 확인하고, 그렇다면 반사를 사용하여 path 인스턴스 필드를 읽을 수 있는지 여부를 확인할 수 있습니다. 나는 그 접근을하기위한 세부 사항을 생략 할 것이다. 왜냐하면 대부분의 상황에서 자바 문서와 온라인을 쉽게 발견 할 수 있기 때문이다. 그 질문은 왜 그런지에 대한 맥락을 제공하지 않기 때문에 더 이상 합리적인 접근법을 제시하기가 어렵습니다.