如何从Java的InputStream中获取文件路径/名称?
不可能实现。(不是来自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);
}
你不能这样做,因为InputStream
可能不是文件或路径。你可以实现自己的InputStream
来动态生成数据。
两个重要的面向对象设计原则阻止你做你所要求的事情:抽象和封装。
InputStream
,它是一个通用接口,可以提供字节,无论这些字节的来源如何。 InputStream
的抽象没有文件路径的概念;这只与InputStream
的特定实现相关。FileInputStream
封装了它正在读取的文件的细节,因为作为一个InputStream
,这些信息对于使用是不相关的。 path
实例字段被封装,因此对于类的使用者不可用。话虽如此,如果您愿意接受一些重要的限制,访问path
变量是可能的。基本上,要点是您可以检查InputStream
是否实际上是FileInputStream
的实例,如果是,则使用反射读取path
实例字段。我将省略访问的详细信息,因为它在java.lang.Class
Java文档和在线上很容易发现,并且在大多数情况下并不是一个真正好的事情。由于问题没有提供关于为什么的上下文,因此很难提供任何更合理的方法。