InputStream中的文件路径/名称

Muh*_*edy 14 java io inputstream

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

b.r*_*oth 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);
    }
Run Code Online (Sandbox Code Playgroud)


Pyr*_*cal 9

你不能,因为InputStream可能不是文件或路径.您可以实现自己的动态InputStream生成数据


E-R*_*Riz 5

两个重要的面向对象设计原则阻止您完成您所要求的事情:抽象和封装。

  • 抽象是定义一般概念的过程,该概念仅具有在特定上下文中使用所需的细节(更多详细信息请参见此处)。在这种情况下,抽象是InputStream,它是一个可以提供字节的通用接口,无论这些字节的来源如何。an 的抽象InputStream没有文件路径的概念;这仅与 的特定实现相关InputStream
  • 封装是向该类的消费者/用户隐藏该类的实现细节的过程。在这种特殊情况下,FileInputStream封装它正在读取的文件的详细信息,因为该InputStream信息与用法无关。实例path字段是封装的,因此该类的用户无法使用。

话虽如此,如果您愿意接受一些重要的限制,则可以访问该变量。path基本上,要点是您可以检查是否InputStream实际上是 的实例FileInputStream,如果是,则使用反射来读取path实例字段。我将省略进行该访问的详细信息,因为它很容易在java.lang.ClassJava 文档和在线中找到,并且在大多数情况下通常并不是一件好事。由于该问题没有提供有关原因的背景,因此很难提供任何更合理的方法。