2010-03-23 5 views

Répondre

10

Ce n'est pas possible. (pas à partir de FileInputStream dans l'API Java). Le constructeur FileInputStream ne stocke pas ces informations dans tous les domaines:

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

Vous ne pouvez pas car le InputStream peut ne pas avoir été un fichier ou un chemin d'accès. Vous pouvez implémenter votre propre InputStream qui génère des données à la volée

0

Deux importants principes de conception orientée objet vous empêchent de faire ce que vous demandez: l'abstraction et l'encapsulation.

  • Abstraction est le processus de définition d'un concept général qui a seulement les détails nécessaires à son utilisation dans un contexte particulier (plus de détails here). Dans cette situation, l'abstraction est InputStream, qui est une interface générale qui peut fournir des octets, indépendamment de la source de ces octets. L'abstraction d'un InputStream n'a pas de concept de chemin de fichier; Cela ne concerne que les implémentations particulières de InputStream.
  • L'encapsulation est le processus de masquage des détails d'implémentation d'une classe par les consommateurs/utilisateurs de cette classe. Dans cette situation particulière, FileInputStream encapsule les détails du fichier en cours de lecture car, en tant que InputStream, cette information n'est pas pertinente pour l'utilisation. Le champ d'instance path est encapsulé et n'est donc pas disponible pour les utilisateurs de la classe.

Ceci étant dit, il est possible d'accéder à la variable path si vous êtes prêt à accepter des limites importantes. Fondamentalement, l'essentiel est que vous pouvez vérifier si le InputStream est, en fait, une instance de FileInputStream et, si c'est le cas, utilisez la réflexion pour lire le champ d'instance path. Je vais laisser de côté les détails de faire cet accès, car il est facilement décelable dans les docs Java et en ligne, et pas vraiment une bonne chose à faire dans la plupart des contextes. Puisque la question ne fournit pas de contexte expliquant pourquoi, il est difficile d'offrir des approches plus raisonnables.

Questions connexes