InputStream中的文件路径/名称

时间:2010-03-23 17:00:24

标签: java io inputstream

如何从Java中的InputStream获取文件路径/名称?

3 个答案:

答案 0 :(得分: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);
    }

答案 1 :(得分:9)

您不能,因为InputStream可能不是文件或路径。您可以实现自己的InputStream即时生成数据

答案 2 :(得分:2)

两个重要的面向对象设计原则阻止你做你所要求的:抽象和封装。

  • 抽象是定义一般概念的过程,该概念仅包含在特定上下文中使用所需的详细信息(更多详细信息here)。在这种情况下,抽象是InputStream,它是一个可以提供字节的通用接口,,无论这些字节的来源是什么InputStream的抽象没有文件路径的概念;这只与InputStream
  • 的特定实现相关
  • 封装是从该类的使用者/用户隐藏类的实现细节的过程。在这种特殊情况下,FileInputStream会封装它正在读取的文件的详细信息,因为InputStream该信息与使用情况无关。 path实例字段是封装的,因此对该类用户不可用。

话虽如此,如果您愿意接受一些重要限制, 可以访问path变量。基本上,要点是您可以检查InputStream实际上是FileInputStream的实例,如果是,请使用反射来读取path实例字段。我将忽略这些访问的细节,因为它可以在java.lang.Class Java文档和在线中轻松发现,而在大多数情况下并不是一般的好事。由于这个问题没有提供关于原因的背景,因此很难提供更合理的方法。