2010-03-23 23 views

Respuesta

10

No es posible. (no desde FileInputStream en la API de Java). El constructor FileInputStream no almacena esta información en cualquier campo:

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

No puede porque el InputStream podría no haber sido un archivo o una ruta. Puede implementar su propio InputStream que genere datos sobre la marcha

0

Dos importantes orientadas a objeto Principios de diseño que impiden hacer lo que preguntas: abstracción y la encapsulación.

  • Abstracción es el proceso de definición de un concepto general que tiene sólo los detalles necesarios para su uso en un contexto particular (más detalles here). En esta situación, la abstracción es InputStream, que es una interfaz general que puede proporcionar bytes, independientemente de la fuente de esos bytes. La abstracción de un InputStream no tiene ningún concepto de una ruta de archivo; eso solo es relevante para implementaciones particulares de InputStream.
  • La encapsulación es el proceso de ocultar detalles de implementación de una clase a consumidores/usuarios de esa clase. En esta situación particular, FileInputStream encapsula los detalles del archivo que está leyendo, porque como InputStream esa información no es relevante para el uso. El campo de instancia path es encapsulado y, como tal, no está disponible para los usuarios de la clase.

Habiendo dicho esto, es posible acceder a la variable path si usted está dispuesto a aceptar algunas limitaciones importantes. Básicamente, la esencia es que puede verificar si el InputStream es, de hecho, una instancia de FileInputStream y, de ser así, utilice la reflexión para leer el campo de instancia path. Dejaré de lado los detalles de hacer ese acceso, ya que es fácilmente detectable en los documentos de Java java.lang.Class y en línea, y no es realmente algo bueno en la mayoría de los contextos. Dado que la pregunta no proporciona un contexto sobre por qué, es difícil ofrecer enfoques más razonables.