如何从Java中的InputStream获取文件路径/名称?
答案 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)
两个重要的面向对象设计原则阻止你做你所要求的:抽象和封装。
InputStream
,它是一个可以提供字节的通用接口,,无论这些字节的来源是什么。 InputStream
的抽象没有文件路径的概念;这只与InputStream
。FileInputStream
会封装它正在读取的文件的详细信息,因为InputStream
该信息与使用情况无关。 path
实例字段是封装的,因此对该类用户不可用。话虽如此,如果您愿意接受一些重要限制, 可以访问path
变量。基本上,要点是您可以检查InputStream
实际上是FileInputStream
的实例,如果是,请使用反射来读取path
实例字段。我将忽略这些访问的细节,因为它可以在java.lang.Class
Java文档和在线中轻松发现,而在大多数情况下并不是一般的好事。由于这个问题没有提供关于原因的背景,因此很难提供更合理的方法。